zoukankan      html  css  js  c++  java
  • 使php支持mbstring库

    多国语言并存就意味着多字节,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′);   

    • echo ”   

    <li  class="alt">“;   

    • echo “mb_strcut:” . mb_strcut($str, 0, 6, ‘utf-8′);   

    <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

    就可以了。

  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/hubing/p/3346105.html
Copyright © 2011-2022 走看看