预览模式: 普通 | 列表

php中如何截取中文字符串

 众所周知php原生函数substr是不支持截取中文字符串的。下面的代码提供了多种截取php中文字符串的方法。

 

1. 截取GB2312中文字符串

PHP代码
  1. <?php  
  2. //截取中文字符串  
  3. function mysubstr($str$start$len) {  
  4.     $tmpstr = "";  
  5.     $strlen = $start + $len;  
  6.     for($i = 0; $i < $strlen$i++) {  
  7.         if(ord(substr($str$i, 1)) > 0xa0) {  
  8.             $tmpstr .= substr($str$i, 2);  
  9.             $i++;  
  10.         } else  
  11.             $tmpstr .= substr($str$i, 1);  
  12.     }  
  13.     return $tmpstr;  
  14. }  
  15. ?>  

 

2. 截取utf8编码的多字节字符串

PHP代码
  1. <?php  
  2. < ?php  
  3. //截取utf8字符串  
  4. function utf8Substr($str$from$len)  
  5. {  
  6.     return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.  
  7.                        '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',  
  8.                        '$1',$str);  
  9. }  
  10. ?>  

 

3. UTF-8、GB2312都支持的汉字截取函数

PHP代码
  1. <?php  
  2. /* 
  3. Utf-8、gb2312都支持的汉字截取函数 
  4. cut_str(字符串, 截取长度, 开始长度, 编码); 
  5. 编码默认为 utf-8 
  6. 开始长度默认为 0 
  7. */  
  8.   
  9. function cut_str($string$sublen$start = 0, $code = 'UTF-8')  
  10. {  
  11.     if($code == 'UTF-8')  
  12.     {  
  13.         $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";  
  14.         preg_match_all($pa$string$t_string);  
  15.   
  16.         if(count($t_string[0]) - $start > $sublenreturn join(''array_slice($t_string[0], $start$sublen))."...";  
  17.         return join(''array_slice($t_string[0], $start$sublen));  
  18.     }  
  19.     else  
  20.     {  
  21.         $start = $start*2;  
  22.         $sublen = $sublen*2;  
  23.         $strlen = strlen($string);  
  24.         $tmpstr = '';  
  25.   
  26.         for($i=0; $i$strlen$i++)  
  27.         {  
  28.             if($i>=$start && $i< ($start+$sublen))  
  29.             {  
  30.                 if(ord(substr($string$i, 1))>129)  
  31.                 {  
  32.                     $tmpstr.= substr($string$i, 2);  
  33.                 }  
  34.                 else  
  35.                 {  
  36.                     $tmpstr.= substr($string$i, 1);  
  37.                 }  
  38.             }  
  39.             if(ord(substr($string$i, 1))>129) $i++;  
  40.         }  
  41.         if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";  
  42.         return $tmpstr;  
  43.     }  
  44. }  
  45.   
  46. $str = "abcd需要截取的字符串";  
  47. echo cut_str($str, 8, 0, 'gb2312');  
  48. ?>  

查看更多...

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1817

Mysql大小写转换

 通常情况下,我选择 lower(), upper() 来实现MySQL转换字符串大小写,因为这和其他数据库中函数相兼容。

Tags: mysql

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2043

 广告位

↑返回顶部↑