php中文汉字替换与模式匹配的问题!!请大家必看!

作者: bluedoor原帖地址:http://www.anbbs.com/anbbs/index.php?f_/(汉字)+/ism”,”我是汉字,看你把我怎么着!”,$m_a);  这个模式很简单就是匹配出“汉字”。这种情况模式中包含汉字可以成功匹配出来,但是也不要高兴得太早,结果不确定,为什么不确定你慢慢往下看。  必出现问题情况如下:  preg_match_all(“/[汉字]+/ism”,”我是汉字,看你把我怎么着!”,$m_a);  本想匹配出现“汉”、“字”或者“汉字”。这个必出现问题,匹配的结果一大群乱码,没准还会出个死循环呢。为什么会出现这种情况?是因为php内部使用不是unicode,不支持多字节文字,所以一个”汉字”就被当成4bytes的ascii去进行模式匹配,不出错才怪呢!  后来我又试试重新写一下模式匹配,发现一种似乎(为什么说似乎?往后看)方法可以解决:  preg_match_all(“/(汉|字)+/ism”,”我是汉字,看你把我怎么着!”,$m_a);  这样写可以匹配出“汉”、“字”或者“汉字”,$m_a中的结果array([0] => array([0] => 汉字)[1] => array([0] => 字))  怎么样全匹配的字符串出现了吧!可是高兴得太早了,后来在实际中用还是会经常出问题!再去找问题,终于找到问题的根了!php不支持多字节文字,所以在进行模式匹配与字符操作的时候都是内码转化后进行的(我不知道这样说对不对),举个实例吧:  eregi_replace(“性”,”没有” , “有责任感”);这个操作就是要把字符串”有责任感”中”性”字替换成”没有”,最后的结果是什么?因为”有责任感”中没有”性”就个字,结果应该是没有执行替换操作返回”有责任感”,可是结果竟然是”用挥叙任感”!

http://www.bkjia.com/phpjc/629376.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629376.htmltecharticle作者: bluedoor 原帖地址:http://www.anbbs.com/anbbs/index.php?f_id=3page=1 这两天正在做一个关键字加亮显示的程序,写好的程序在本地测试也跑得好好…

Posted in PHP

发表评论