解决PHP截取中文字符串问题
时间:2011-04-06
来源:互联网
解决PHP截取中文字符串问题
PHP截取字符串如果是英文那很好办,直接用substr就行了,一般不会出现乱码.中文就有点麻烦了.
下面给出两种解决办法:
(一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下
- <?php  
 
- echo mb_substr($str, $start, $length, $encoding);
 
- echo "<br />";
 
- ?>
(二)自定义截取中文字符串函数,基本上就是仿照mb_substr写个函数,直接调用罢了,以下为我找到的代码,其实很简单
- <?php  
 
- function  substr_cn($string_input,$start,$length)
 
- {
 
-     /* 功能:
 
-      * 此算法用于截取中文字符串
 
-      * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度
 
-      * 参数:
 
-      * 参数$string为要截取的字符串,
 
-      * 参数$start为欲截取的起始位置,
 
-      * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个)
 
-      * 返回值:
 
-      * 返回截取结果字符串
 
-      * */
 
-     $str_input=$string_input;
 
-     $len=$length;
 
-     $return_str="";
 
-     //定义空字符串
 
-     for ($i=0;$i<2*$len+2;$i++)
 
-         $return_str=$return_str." ";
 
-     $start_index=0;
 
-     //计算起始字节偏移量
 
-     for ($i=0;$i<$start;$i++)
 
-     {
 
-         if (ord($str_input{$start_index}>=161))          //是汉语      
 
-         {
 
-             $start_index+=2;
 
-         }
 
-         else                                          //是英文
 
-         {
 
-             $start_index+=1;
 
-         }         
 
-     }     
 
-     $chr_index=$start_index;
 
-     //截取
 
-     for ($i=0;$i<$len;$i++)
 
-     {
 
-         $asc=ord($str_input{$chr_index});
 
-         if ($asc>=161)
 
-         {
 
-             $return_str{$i}=chr($asc);
 
-             $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));
 
-             $len+=1; //结束条件加1
 
-             $i++;    //位置偏移量加1
 
-             $chr_index+=2;
 
-             continue;            
 
-         }
 
-         else  
 
-         {
 
-             $return_str{$i}=chr($asc);
 
-             $chr_index+=1;
 
-         }
 
-     }     
 
-     return trim($return_str);
 
- }//end of substr_cn
 
- ?>
作者: 听老歌 发布时间: 2011-04-06
             我的做法一般是先urlencode之后再进行,sbustr()            
            作者: a.a 发布时间: 2011-04-06
             本帖最后由 stabilization 于 2011-04-06 17:40 编辑
俺和楼上同做法
但是是substr 
            
            俺和楼上同做法
但是是substr
 
            作者: stabilization 发布时间: 2011-04-06
 相关阅读 更多  
      
    热门阅读
-   office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具阅读:74 
-   如何安装mysql8.0 如何安装mysql8.0阅读:31 
-   Word快速设置标题样式步骤详解 Word快速设置标题样式步骤详解阅读:28 
-   20+道必知必会的Vue面试题(附答案解析) 20+道必知必会的Vue面试题(附答案解析)阅读:37 
-   HTML如何制作表单 HTML如何制作表单阅读:22 
-   百词斩可以改天数吗?当然可以,4个步骤轻松修改天数! 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!阅读:31 
-   ET文件格式和XLS格式文件之间如何转化? ET文件格式和XLS格式文件之间如何转化?阅读:24 
-   react和vue的区别及优缺点是什么 react和vue的区别及优缺点是什么阅读:121 
-   支付宝人脸识别如何关闭? 支付宝人脸识别如何关闭?阅读:21 
-   腾讯微云怎么修改照片或视频备份路径? 腾讯微云怎么修改照片或视频备份路径?阅读:28 















