2013-02-28 232 views
0

此代碼使用非字母數字字符

​​

回報

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

回答

1

\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] 

這將匹配字母和數字。

+0

很棒!謝謝 – user2117559 2013-02-28 21:22:50

0

您必須在模式的末尾添加正則表達式的修飾符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

+0

你測試過了嗎?在writecodeonline.com/php上,這將返回相同的不需要的結果。據我所知,'u'修飾符不會改變預定義字符類的行爲。 – stema 2013-02-28 21:17:58

+0

不工作,p {L}很好,如上 – user2117559 2013-02-28 21:24:13

相關問題