PHP substr 截取中文乱码的问题解决办法

在php中为我们提供了几个字符截取函数,包括substr,mb_substr,mb_strcut函数,我们有些php初学者会利用substr来截取中文,结果发现中文会有乱码了,出现乱码我们可以使用mb_substr来解决。

文章页面的 description 是使用 substr 函数来截取220字符的,但是最后一个汉字总是乱码,而且截取出来的长度也不正确。

通过神奇的 Google 找到方法,可能是因为 substr(string,start,length),会将汉字以字符的形式截断,而造成乱码.

解决方案:使用 PHP 扩展库中的 mb_substr 方法。

注意:1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Windows/system32里面。 

2.在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到;extension=php_mbstring.dll把前面的;号去掉,这样mb_substr函数就可以生效了

方法定义:string mb_substr ( string str, int start [, int length [, string encoding]] )

注意:在使用 mb_substr()/mb_strcut 最后要加入多一个参数,以设定字符串的编码,例如:echo mb_substr(‘原本会出现乱码的汉字!’, 0, 7, ‘utf-8′);

再如如下代码:$description = mb_substr(strip_tags($post->post_content),0,220,’utf-8′);

mb_strcut函数:mb_strcut函数功能也可以截取字符串长度,下面实例具体看看区别在哪:

  1. <?php  
  2. $str = '这样一来我的字符串就不会有乱码^_^'
  3. echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');  
  4. //结果:这样一来我的字  
  5. echo "<br>"
  6. echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');  
  7. //结果:这样  
  8. ?> 

从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。

substr()函数中文版 普通的substr()函数可以取得字符串的指定长度子字符串,但遇到中文时可能会在新字符串末尾产生乱码,下面这个函数将超过$len长度的字符串转换成以“…”结尾,并且去除了乱码。 

用法:$new = getsubstring($old,20);代码如下:

  1. function getsubstring($str,$len)  
  2. {  
  3. for($i = 0;$i <$len;$i++)  
  4. {  
  5.    if ($i >=0 AND $i <$len)  
  6.    {  
  7.     if(ord(substr($str,$i,1)) > 0xa1)  
  8.      $result_str.=substr($str,$i,2);  
  9.     else  
  10.      $result_str.=substr($str,$i,1);  
  11.    }  
  12.    if(ord(substr($str,$i,1)) > 0xa1)  
  13.     $i++;  
  14. if(strlen($str)<=$len)  
  15.    return $result_str;  
  16. else  
  17.    return $result_str."…";  
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » PHP substr 截取中文乱码的问题解决办法

3 评论

  1. Thank you for great information. Hello Administ . Onwin , Onwin Giriş , Onwin Güncel Giriş , Onwin Yeni Adres , onwin

  2. Everything is very open and very clear explanation of issues. was truly information.

评论已关闭

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡