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

WBOY
Freigeben: 2016-07-13 17:12:23
Original
982 Leute haben es durchsucht

作者: bluedoor
原帖地址:http://www.anbbs.com/anbbs/index.php?f_id=3&page=1
  这两天正在做一个关键字加亮显示的程序,写好的程序在本地测试也跑得好好的,可是一上去页面就出现一堆一堆的乱码,别说加亮了,简直就是没的看!
  我就找错误,找来找去,发现英文没有问题,遇到汉字容易出问题,有的时候遇到汉字必出问题。
  总结一下:
  当使用模式匹配的时候,如:preg_match_all($pat,……)与preg_replace($pat,……)……
  容易出问题的情况如下:
  preg_match_all("/(汉字)+/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("性","没有" , "有责任感");这个操作就是要把字符串"有责任感"中"性"字替换成"没有",最后的结果是什么?因为"有责任感"中没有"性"就个字,结果应该是没有执行替换操作返回"有责任感",可是结果竟然是"用挥叙任感"!

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/629376.htmlTechArticle作者: bluedoor 原帖地址:http://www.anbbs.com/anbbs/index.php?f_id=3page=1 这两天正在做一个关键字加亮显示的程序,写好的程序在本地测试也跑得好好...
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage