PHP字符串mbstring处理中文字符串的具体方法解析,不重新编译php,增加动态模块(以mbstring模块为例)。

jackxiang 2010-6-11 22:54 | |
问题:
PHP 中文截取UTF8的编码 16个字符 有没有现成的,多了用...。
回答:
mbstring
问道:那中文一个字占用多长,E文标点多长?
回答:
mb都认为是一个



大家通过对PHP的学习,可以运用这一高级语言创建一个性能较高的网站。对于初学者来说,对于PHP字符串mbstring还是比较陌生的,下面我们就来介绍一下PHP字符串mbstring的具体应用。 mysql

  多国语言并存就意味着多字节,PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于 GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。
mysql

  采用PHP字符串mbstring可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:
linux

  1. 在php.ini中设置mbstring.internal_encoding = UTF-8
ssh

  2. 调用mb_internal_encoding(”GBK”) unix

  除了PHP字符串mbstring,还有很多切割函数,其中mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。而且从函数切割对长度的作用也不同,mb_strcut的切割条件是小于strlen, mb_substr是等于strlen,看下面的例子,

mysql

  < ? $str = ‘我是一串比较长的中文-www.jefflei.com’; echo “mb_substr:” . mb_substr($str, 0, 6, ‘utf-8′); echo ” “; echo “mb_strcut:” . mb_strcut($str, 0, 6, ‘utf-8′); ?> unix

  输出如下: ssh

  mb_substr:我是一串比较

oracle

  mb_strcut:我是 linux

  需要注意的是,PHP字符串mbstring并不是PHP核心函数,使用前需要确保在php编译模块时加入mbstring的支持:

unix

  (1)编译时使用–enable-mbstring linux

  (2)修改/usr/local/lib/php.inc oracle

  default_charset = “zh-cn”

unix

  mbstring.language = zh-cn oracle

  mbstring.internal_encoding =zh-cn

mysql

  PHP字符串mbstring类库内容比较多,还包括mb_ send_ mail 之类的email处理函数等 ssh

mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none





  php内置的substr无法解决截取中文字符串的乱码问题:

要使用到的函数:mb_substr和mb_strlen。

mb_substr使用方法:mb_substr("我是要被截取的中文字符串",开始位置, 要截取的长度, 字符串的编码);实例:mb_substr("我是要被截取的中文字符串",0, 3, 'gbk');结果将是“我是要”;这个函数可以解决字符串中包含中文、英文、数字、字符各种类型的字符串。
在实际使用过程中需要和mb_strlen配合使用,mb_strlen的使用方法和strlen类似,只是多了一个编码参数:mb_strlen("我是要被计算长度的字符", "gbk");结果是11。
详细的使用例子:
比如字符串超过20个就需要截取:
if(mb_strlen($str, "gbk") >20)
{
  $str = mb_substr($str, 0, 20, "gbk");
}

————————————————————————————————————————————————————
1 进入php源代码目录中的mbstring所在目录
cd /usr/local/src/php-5.2.4/ext/mbstring/
2 执行php安装后目录中的bin/phpize文件
/usr/local/php/bin/phpize
3 进入php源代码目录
cd /usr/local/src/php-5.2.4/
4 执行上述目录中的configure文件
./configure --prefix=/usr/local/src/php-5.2.4/ext/mbstring --with-php-config=/usr/local/php/bin/php-config
5 make; make install
将mbstring.so安装到/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/中
6 编辑php.ini,加入一行
extension=mbstring.so
7 重新启动httpd
service httpd restart
(如果是php-cgi模式的,请先杀掉所有的php-cgi进程,再重启httpd)

来自:http://blog.cntv.cn/11430895-3105278.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3169/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-3-25 21:03
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]