php分割中文字符串
有时候要显示文章的一段简介,最基本的思想是把得到的文章定义一个字符串。然后将其按指定的字符数进行字符串的提取。如果是对于英文来说只要用substr这个函数就可以了,因为它的一个字符就是一个byte,但中文字符要两个字节。所以,如果是纯粹按字节这样简单分割就会出现不合意的结果。
基本的解决方案的思想是:把字符串中的一个个字符提取,然后进行识别(如果是ASCII,则其十进制小于127;如果是中文或者其它字符则其十进制大于127),依此遍历需要的数目。
代码如下:
function gb2312_substr($string, $start = 0, $len = 10)
{
$end = $start + $len;
$str_len = strlen($string);
if($end > $str_len)
{
return $string;
}
$start_count = 0;
//找开始位置
for($j = 0; $j < $str_len; $j++)
{
if($start_count >= $start)
{
break;
}
if(ord($string{$j}) < 127)
{
$start_count += 1;
continue;
}
else
{
if(ord($string{$j+1}) > 127)
{
$start_count += 1;
$j++;
continue;
}
else
{
$start_count += 1;
continue;
}
}
}
//取字符
$s = '';
$result_count = 0;
for($i = $j; $i < $str_len; $i++)
{
if($result_count >= $len)
{
break;
}
if(ord($string{$i}) < 127)
{
$s .= $string{$i};
$result_count += 1;
continue;
}
else
{
if(ord($string{$i+1}) > 127)
{
$s .= $string{$i} . $string{++$i};
$result_count += 1;
continue;
}
else
{
continue;
}
}
}
return $s;
}
- function utf_substr($str,$len){
- for($i=0;$i<$len;$i++){
- $temp_str=substr($str,0,1);
- if(ord($temp_str) > 127){
- $i++;
- if($i<$len){
- $new_str[]=substr($str,0,3);
- $str=substr($str,3);
- }
- }else{
- $new_str[]=substr($str,0,1);
- $str=substr($str,1);
- }
- }
- return join($new_str);
- }
其实类型的代码可以到网上搜索,思想基本一样。