php "str_split"函数分割中文字符串乱码问题……

// 测试分割中文
$str2="轻轻地我走了,正如我轻轻的来。";
echo "原字符串:<b>$str2.</b><br/>";
echo "1、以指定长度为5分割字符串:<br/>";
$arr3=str_split($str2,5);
echo "--\$arr3[0]的值:"."$arr3[0]"."<br/>";
echo "--\$arr3[1]的值:"."$arr3[1]";

结果是:
原字符串:轻轻地我走了,正如我轻轻的来。.
1、以指定长度为5分割字符串:
--$arr3[0]的值:轻轼br/>--$arr3[1]的值:?地漯body>
乱码!!求解释,求真相!

一个解决方案.
测试发现,preg_split对中文(多字节)的分隔符处理可能真的存在问题.
原因可能是正则匹配时不能正常分隔一个多字节字符(猜测).
但我实验用半角(英文)的分隔符就工作得很好.
于是
我在处理待分隔的文本前先对文本进行替换,把中文的句点和逗号都替换成英文半角的.然后再使用preg_split,暂时发现工作得不错.
以下是我的测试代码.
<?php
$test = <<<EOF
记者从有关人士处获悉,嫦娥二号发射的各项准备工作全部就绪,昨日经专家组评审,卫星、火箭、发射场、测控等系统均情况正常,具备发射条件。今天起,西昌卫星发射中心的加注手将为火箭加注燃料。

据一位航天专家介绍,因为地球和月球都在转动的缘故,所以地月之间的最佳交汇点每年仅出现3次,而这3次便是发射探月卫星的最佳节点,经过观测,今年3次的出现时间分别为10月1日、10月2日和10月3日,而最佳发射窗口则是1日晚7时,2日晚8时和3日晚10时,其中国庆日晚7时为佳中之佳。

针对媒体称10月1日发射窗口时间为晚6时59分57秒,该专家告诉本报记者,早3秒并非提前3秒发射,而是将这3秒时间预留出来,作为现场指挥员在发送倒计时口令的缓冲时间。(记者万强)

EOF;

//$input = $_POST[$content]; //........................获取要分割的字符串
$test = str_replace(",",',',$test);
$test = str_replace("。",'.',$test);
$mode="/[,|.]/s"; //......................用“逗号” 和 “句号” 分割字符串

$output = preg_split($mode,$test,-1);

print_r($output);
?>
============
楼主不防试试,我的代码是gb2312的字串.
经测试在,字符串为UTF8时,也可以正常工作.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-03
说不太明白,唯一能确定的是汉字跟英文或标点符号处理方式不同,5个汉字是10个长度,5个英文字符是5个长度跟这个道理一样,汉字的话应该会先转换成别的编码格式,转换成别的格式的汉字就是问题了...去找找这方面的资料也许有答案.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网