使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

就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM