郁闷的PHP字符串函数

王志勇 发表于 2009年01月29日 12:49

PHP的substr()是一个十分重要的函数,可以实现对字符串的处理,例如截取字符串的某部分,如把IP地址220.181.20.58替换为220.181.*.*,需要用到substr()函数。让人郁闷的是,substr()不支持中文,会产生乱码。JavaScript的substr()函数和ASP的Mid()函数,无论是UTF-8还gb2312编码,都可以很好地直接支持中文。

另外如$pep="和平海底"; $auf=$pep[1];,$auf的结果是乱码,而不是“平”。如果使用数组array()函数如:$pep=array("和", "平", "海", "底"); $auf=$pep[1];,$auf的结果是仍然是乱码。

如果substr()或者array()的处理字符是英文或者数字、半角符号,则没有问题。我用PHP4和PHP5测试了一下,都有此问题。在网上搜索了一下,因为PHP把处理的全角字符的字节拆开来处理,ANSI编码拆为2个字节,UTF-8编码拆为3个字节,需要另外一段程序,如“php 截取”。如果大量地使用substr(),再加上另外的这段程序来处理段落的中文字符,在一定程度上大大降低了程序的效率,增加服务器的负担和成本。

PHP的替换函数str_replace(),以及查找字符的位置strpos()函数,则可以很好地直接支持中文全角字符。

4条评论:
1   zeal 2009-02-01 13:34
安装mb库,用mb_前缀的字符串处理函数来处理多字节字符串。
2   自由勇 2009-02-01 18:15
谢谢。:)
3   CodeBit.cn 2009-02-02 15:05
$pep=array("和", "平", "海", "底");
$auf=$pep[1];

这个应该会返回 "平",
造成乱码有时会和文件编码还有meta中声明有关。

4   自由勇 2009-02-02 19:07
文件编码、meta都使用UTF-8,
使用header()设定UTF-8,也都有substr()中文乱码的问题。
在不使用mb_substr()的情况下。:)

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

王志勇:1980-09-26 (40周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2020年10月
2020年09月(14)
2020年08月(14)
2020年07月(14)
2020年06月(16)
2020年05月(13)
2020年04月(18)
2020年03月(14)
2020年02月(15)
2020年01月(16)
2019年12月(11)
2019年11月(26)
2019年10月(25)
2019年09月(30)
2019年08月(10)
2019年07月(29)
2019年06月(30)
2019年05月(26)
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2020 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue