2013-02-28 109 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

相关问题