iconv 中文字符分割
我在日志介绍过PHP对中文字符分割的方法,其中我用到ord()函数把字符转换成ASCII码,然后通过判断不同字符的长度来正确分割中文字符串。前一段在研究lucene的源代码时,看到iconv()函数,发现用iconv()函数进行中文字符分割要更加简洁。代码如下:
<?php$s="上网导航";$b = array();$len = iconv_strlen($s, "UTF-8");for ($i=0; $i<$len; $i++){$a = iconv_substr($s,$i,1,"UTF-8");array_push($b, $a);}print_r($b);?>/* 结果如下:Array([0] => 上[1] => 网[2] => 导[3] => 航)*/
PHP的iconv模块是用来支持多国语言的。我偏好UTF-8,所以你看到我在iconv_strlen()和iconv_substr()里UTF-8作为编码方式。除了多了编码,iconv_strlen()和iconv_substr()的用法和strlen()和substr()的用法相同,在这里不做详述。
另外一个注意点是,iconv_substr()函数在PHP5.2以前的版本里存在一个BUG:当字符串的长度是1的时候会报错。例如:
$s = iconv_substr('A', 0, 1, 'UTF-8'); 程序运行报错信息:Notice: iconv_substr() [function.iconv-substr.html]: Unknown error(0) ...如果你使用PHP5.2以前的版本,这里有个解决办法:在字符串后加上一个空格;如下:
<?php$s="上";//字符串的长度为1$b = array();$len = iconv_strlen($s, "UTF-8");$s .= " "; //在string后加上一个空格,来解决iconv_substr的bugfor ($i=0; $i<$len; $i++){$a = iconv_substr($s,$i,1,"UTF-8");array_push($b, $a);}print_r($b);?>
标签: PHP



0 条评论:
发表评论
指向此帖子的链接: