中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

php正則匹配中文亂碼問題怎么解決-創(chuàng)新互聯(lián)

php正則匹配中文亂碼問題怎么解決?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鷹潭企業(yè)網(wǎng)站建設(shè),鷹潭品牌網(wǎng)站建設(shè),網(wǎng)站定制,鷹潭網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鷹潭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

php正則匹配中文亂碼的解決辦法:首先打開PHP代碼文件;然后在代碼文件中加上UTF8修飾符即可,其正則表達式的語句如“preg_replace('/[萬]/u','萬',$a);”。

具體問題:

PHP字符串中用正則表達式匹配中文出現(xiàn)亂碼

<?php
echo '<h3>正則表達式匹配中文</h3><br>';
$a = '天地不仁,以萬物為芻狗';
$b = preg_replace('/萬/','萬',$a);
echo $b;
echo '<h3>加上方括號后替換結(jié)果出現(xiàn)亂碼</h3><br>';
$c = '天地不仁,以萬物為芻狗';
$d = preg_replace('/[萬]/','萬',$a);
echo $d;
 ?>

以上程序運行結(jié)果可以在http://nyaii.com/s/test.php看到。不知為何,為匹配的中文字符加上方括號后就出現(xiàn)了亂碼。同樣的情形,在javascript中執(zhí)行就一切正常。

 '天地不仁'.replace(/[天]/,'')
 //outputs "地不仁"

解決辦法:

加上UTF8修飾符即可

$d = preg_replace('/[萬]/u','萬',$a);

其余修飾符請見

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

以下為對于題主評論中的問題的補充內(nèi)容

關(guān)于為什么[]內(nèi)就需要加u修飾符的問題,實際上嚴格來說,兩種場合你最好都加上u修飾符

但為什么[]就會導(dǎo)致亂碼呢,這就要從字節(jié)層面而不是字符層面來解釋了。

首先我們知道PHP的字符串并不是Unicode進行存儲的,然后我們來看下這個代碼

<?php
$a = "萬";
echo strlen($a); //3
for ($i = 0; $i < strlen($a); $i++) {
    echo dechex(ord($a[$i])) . ' '; //e4 b8 87
}

我們可以拿到"萬"字的utf8十六進制編碼是e4b887

所以在沒有開啟utf8修飾符的時候,正則表達式引擎并沒有把"萬"當成一個獨立的字符,而是三個字節(jié)的連續(xù)數(shù)據(jù)。

以下是結(jié)論:

當沒有[]進行匹配的時候,它尋找的是十六進制編碼值為 e4 b8 87 的三個連續(xù)字符,換句話說,實際上你的模式是\xe4\xb8\x87,但這種連續(xù)字符的出現(xiàn)在你的字符串中,只有"萬"字能對上,所以替換了并不會有亂碼。但如果你的字符串里面可能還要包括四字節(jié)的utf8編碼字符,例如emoji,可能就會導(dǎo)致問題了

當你在萬外面包裝了[],正則表達式引擎實際上找的是[\xe4\xb8\x87],懂正則表達式的很快就能發(fā)現(xiàn)它實際上是匹配這三個字符的任意一個,所以這個時候就會影響到除了萬以外的別的漢字了

當你加了utf8修飾符之后,"萬"會被正則表達式當成是一個獨立的字符,所以不再會產(chǎn)生這個問題

至于javascript,因為它對字符編碼是原生的unicode,每個字符都會被當成一個字符而不是拆分成字節(jié)數(shù)據(jù),所以不會產(chǎn)生這個問題

感謝各位的閱讀!看完上述內(nèi)容,你們對php正則匹配中文亂碼問題怎么解決大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

標題名稱:php正則匹配中文亂碼問題怎么解決-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://www.rwnh.cn/article34/cehope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)Google、ChatGPT、App開發(fā)、網(wǎng)站內(nèi)鏈、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
尼勒克县| 五原县| 济阳县| 四会市| 阿拉善左旗| 三江| 高台县| 馆陶县| 攀枝花市| 综艺| 盈江县| 丹东市| 阳曲县| 金昌市| 汽车| 枞阳县| 明溪县| 宁武县| 肇东市| 开封县| 绩溪县| 绥阳县| 吴旗县| 汝阳县| 深圳市| 台州市| 祁连县| 阳春市| 二连浩特市| 德格县| 荣成市| 大竹县| 资兴市| 砚山县| 德格县| 舟山市| 安吉县| 西乌珠穆沁旗| 台北县| 镇远县| 福鼎市|