此代碼使用非字母數字字符
回報
xxx [b]AA BB[/b] xxx xä[b]xAAx[/b] [b]xBBBx[/b]óx
如何修改接收
xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]
問題是與非字母數字字符高亮的話,文件是UTF- 8,text來自utf-8中的mysql
此代碼使用非字母數字字符
回報
xxx [b]AA BB[/b] xxx xä[b]xAAx[/b] [b]xBBBx[/b]óx
如何修改接收
xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]
問題是與非字母數字字符高亮的話,文件是UTF- 8,text來自utf-8中的mysql
\w
在PHP是基於純ASCII。將其替換爲Unicode字符屬性\p{L}
,它將起作用。
$text = preg_replace('/(\p{L}*('.implode("|",$words).')\p{L}*)/ui', '[b]$1[/b]', $text);
\p{L}
是Unicode character property,從任何語言
\w
還包含數字匹配任何字母,如果你想這樣,你需要創建一個這樣自己的人物等級:
[\p{L}\d]
這將匹配字母和數字。
您必須在模式的末尾添加正則表達式的修飾符u
$text3 = preg_replace('/(\w*('.implode("|",$words).')\w*)/iu', '[b]$1[/b]', $text);
並獲得:
xxx [b]AA BB[/b] xxx [b]xäxAAx[/b] [b]xBBBxóx[/b]
模式修飾符你可以看到Here
你測試過了嗎?在writecodeonline.com/php上,這將返回相同的不需要的結果。據我所知,'u'修飾符不會改變預定義字符類的行爲。 – stema 2013-02-28 21:17:58
不工作,p {L}很好,如上 – user2117559 2013-02-28 21:24:13
很棒!謝謝 – user2117559 2013-02-28 21:22:50