php中文漢字替換與模式比對的問題!!請大家必看!_PHP教程

來源:互聯網
上載者:User
作者: 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("性","沒有" , "有責任感");這個操作就是要把字串"有責任感"中"性"字替換成"沒有",最後的結果是什嗎?因為"有責任感"中沒有"性"就個字,結果應該是沒有執行替換操作返回"有責任感",可是結果竟然是"用揮敘任感"!

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 這兩天正在做一個關鍵字加亮顯示的程式,寫好的程式在本地測試也跑得好好...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.