设为首页 收藏本站
查看: 594|回复: 0

[经验分享] 使php支持mbstring库

[复制链接]

尚未签到

发表于 2015-8-28 12:40:05 | 显示全部楼层 |阅读模式
  多国语言并存就意味着多字节,PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。
     
  
     
  采用PHP字符串mbstring可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:
     
  1.  在php.ini中设置mbstring.internal_encoding  =  UTF-8<br  >    2.  调用mb_internal_encoding(”GBK”)</br  >
     
  除了PHP字符串mbstring,还有很多切割函数,其中mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。而且从函数切割对长度的作用也不同,mb_strcut的切割条件是小于strlen,  mb_substr是等于strlen,看下面的例子,
     
<ol  class="dp-xml"><li  class="alt"><span  class="tag"><font  color="#006699"><</font  color="#006699"></span  class="tag"> ?   

  • $<span  class="attribute"><font  color="#ff0000">str = ‘我是一串比较长的中文-www.jefflei.com’;   </font  color="#ff0000"></span  class="attribute">
  <li  class="alt">echo “mb_substr:” . mb_substr($str, 0, 6, ‘utf-8&prime;);   

  • echo ”
  <li  class="alt">“;   

  • echo “mb_strcut:” . mb_strcut($str, 0, 6, ‘utf-8&prime;);
  <li  class="alt"><span  class="tag"><font  color="#006699">?></font  color="#006699">


  </span  class="tag"></li  class="alt"></li  class="alt"></li  class="alt"></li  class="alt"></ol  class="dp-xml">   
  输出如下:<br  >    mb_substr:我是一串比较<br  >    mb_strcut:我是</br  ></br  >
     
  需要注意的是,PHP字符串mbstring并不是PHP核心函数,使用前需要确保在php编译模块时加入mbstring的支持:<br  >    (1)编译时使用–enable-mbstring<br  >    (2)修改/usr/local/lib/php.inc<br  >    default_charset  =  “zh-cn”<br  >    mbstring.language  =  zh-cn<br  >    mbstring.internal_encoding  =zh-cn</br  ></br  ></br  ></br  ></br  >
     
  PHP字符串mbstring类库内容比较多,还包括mb_  send_  mail  之类的email处理函数等
  
  
  
  
  
  
  配置mbstring扩展
  首先确保php安装目录下的ext子目录存在php_mbstring.dll 文件。然后编辑php.ini文件:
  ;extension=php_mbstring.dll 去掉分号             extension=php_mbstring.dll
  把输出处理程序设为mbstring对应。    ;output_handler =    output_handler = "mb_output_handler"
  设定文字集为UTF-8。    ;default_charset = "iso-8859-1"     default_charset = "UTF-8"
  设置mbstring的语言为Chinese    ;mbstring.language = Japanese     mbstring.language = Chinese
  设置mbstring的内部编码为UTF-8。    ;mbstring.internal_encoding = EUC-JP     mbstring.internal_encoding = UTF-8
  设置mbstring的输入文字编码为自动判别方式。    ;mbstring.http_input = auto     mbstring.http_input = auto
  把mbstring输出文字编码设为UTF-8。    ;mbstring.http_output = SJIS    mbstring.http_output = UTF-8
  激活mbstring的文字编码自动变换方式。    ;mbstring.encoding_translation = Off     mbstring.encoding_translation = On
  mbstring库 全称是Multi-Byte String 即各种语言都有自己的编码,他们的字节数是不一样的,目前php内部的编码只支持ISO-8859-*, EUC-JP, UTF-8其他的编码的语言是没办法在php程序上正确显示的。
解决的方法就是通过php的mbstring函数库来解决其安装是在编译php的时候加上--enable-mbstring=?
"="后面就是跟需要支持的语言,j具体参数如下:--enable-mbstring=cn for Simplified Chinese support, --enable-mbstring=tw for Traditional Chinese support, --enable-mbstring=kr for Korean support, --enable-mbstring=ru for Russian support, and --enable-mbstring=ja for Japanese support.“没有发现PHP 的扩展设置mbstring,而当前系统好像在使用宽字符集。没有mbstring
扩展的phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.”
这是因为我们在装PHP的时候没有把mbstring模块加上。
在win下很简单啦,只要到配置文件里把mbstring.dll前面的分号去掉,并把文件放到相应的地方就可以了,在linux下就不同了,但是也很简单。只要在编译PHP的时候加上参数
--with-mbstring --enable-mbstring=all
  就可以了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105539-1-1.html 上篇帖子: php毫秒时间戳 下篇帖子: php类似indexof的方法[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表