网站开发日志

2009年3月29日星期日

分享家:Addthis中国

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的bug
for ($i=0; $i<$len; $i++){
   $a = iconv_substr($s,$i,1,"UTF-8");
   array_push($b, $a);
}
print_r($b);
?>
 

标签:

相关文章:

0 条评论:

发表评论

指向此帖子的链接: