Heim >php教程 >php手册 >PHP 中文字符串截取无乱码的方法以及php汉字截取函数_preg_split()

PHP 中文字符串截取无乱码的方法以及php汉字截取函数_preg_split()

WBOY
WBOYOriginal
2016-06-21 08:48:541205Durchsuche

昨天,在写代码时我遇到了一个中文字符串截取的问题,原本是想直接用substr()来,但这个是在单字节符下用的,对于多字节编码的汉字或是其它语言字符中,这个函数可能就用不上了,而且会容易截出乱码来!

 

 

 

现在就把我的下工作记录和总结给大家分享一下:

问题产生及使用案例网站:天气预报15天查询(http://tqybw.net)

问题时间:2013-10-31

 

 

 

解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度;

 

 

 

1、实现方法函数

 

 

 

开启mbstring扩展,然后自定义函数:

 

 

 

<?php  
header(&#39;content-Type:text/html:charset=utf-8&#39;);  
function substr_chinese($str, $start, $length = null) {  
return join("",  
array_slice(  
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length)  
);  
} (PS:^_^不错的php学习交流群:276167802,验证:csl,谢谢!)  
//实例  
$str = "中国地图全图";  
echo substr_utf8($str, 0, 4);  
//输出: 中国地图  
?>  

 

 

2、主要函数功能说明preg_split:

对于初学者来说,大家对 说明 array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )

返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。

flags 可以是下列标记的任意组合(用按位或运算符 组合):

PREG_SPLIT_NO_EMPTY

如果设定了本标记,则 preg_split() 只返回非空的成分。

PREG_SPLIT_DELIM_CAPTURE

如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。

PREG_SPLIT_OFFSET_CAPTURE

如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。

 

 

 

提示

如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split()。

 

 

3、array_slice说明:

array_slice() 函数在数组中根据条件取出一段值,并返回。

 

 

 

<?php  
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");  
print_r(array_slice($a,1,2));  
?>  
输出:Array ( [0] => Cat [1] => Horse )  

 

 

本文讲述了PHP 中文字符串截取无乱码方法,希望本文能给读者带来灵感,帮助读者解决疑问,感谢阅读本文。



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn