preg_replace:通配符与umlaut-characters不匹配

时间:2010-04-21 23:56:11

标签: php preg-replace diacritics

我想使用\ w通配符过滤一个字符串,但不幸的是它不包括变音符号。

$i = "Die Höhe";    
$x = preg_replace("/[^\w\s]/","",$i);
echo $x; // "Die Hhe";

但是,我可以将所有字符添加到preg_replace,但这不是很优雅,因为列表会变得很长。 ATM,我只是为德国人准备这个,但还有更多的语言。

$i = "Die Höhe";    
$x = preg_replace("/[^\w\säöüÄÖÜß]/","",$i);
echo $x; // "Die Höhe";

有没有办法一次匹配所有这些?

2 个答案:

答案 0 :(得分:6)

你的字符串显然是UTF-8,所以你需要'u'标志和unicode属性而不是\ w

$x = preg_replace('/[^\p{L}\p{N} ]/u',"",$i);

答案 1 :(得分:1)

这应该删除所有,在我看来,没有意义的字符:

$val = "Die Höhe";
$val = preg_replace('/[^\x20-\x7e\xa1-\xff]+/u', '', $val);
echo $val; // "Die Höhe"