首頁 >後端開發 >PHP問題 >php preg_replace替換失敗怎麼辦

php preg_replace替換失敗怎麼辦

藏色散人
藏色散人原創
2021-03-05 10:23:212224瀏覽

php preg_replace替換失敗的解決方法:先打開對應的PHP代碼檔;然後將替換不了的字符,印出ASCII碼來替換掉即可。

php preg_replace替換失敗怎麼辦

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

php preg_replace空格無法取代問題

一次坑爹的小bug。讀取一段文字(編碼utf-8),想替換掉空格,str_replace(" "..)、preg_replace("/\s/"..)都不行。

 

 <?php
 
 $str = &#39;<p>    你好<p>&#39;;
 $str = preg_replace(&#39;/\s/is&#39;,&#39;&#39;,$c);
 $str = str_replace(" ", "a", $str); 
 var_dump($str); //不起作用

 

沒辦法,將替換不了的空格ord()下才看到,這個utf-8空格比較特殊。 ASCII 194 160出來的。

 

 <?php
 
 $str = &#39;<p>    你好<p>&#39;;
 $str = str_replace(chr(194) . chr(160), "a", $str);  // 解决方法1
 $str = preg_replace(&#39;/\xC2\xA0/is&#39;, "a", $str);  // 解决方法2
 var_dump($str); //ok

 

問題的根源,在於UTF-8這種編碼裡面,存在著一個特殊的字符,其編碼是「0xC2 0xA0」(194 160),轉換成字元的時候,表現為一個空格,跟一般的半角空格(ASCII 0x20)一樣,唯一的不同是它的寬度不會被壓縮,因此比較多的被用於網頁排版(如首行縮進之類)。而其他的編碼方式如GB2312、Unicode之類並沒有這樣的字元。

整理遇到的各種無法替換的字符:

chr(194).chr(160) 变现为空格
chr(227).chr(128) 变现为空格
chr(226).chr(128).chr(172).chr(226).chr(128).chr(172).chr(30) 变现为空

 

 

總結:替換不了的字符,打印出ASCII碼來總能替換掉吧。

【推薦學習:《PHP影片教學》】

以上是php preg_replace替換失敗怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn