如何在PHP中用空格替换所有非字母数字字符?

4
$html=strip_tags($html);
$html=ereg_replace("[^A-Za-zäÄÜüÖö]"," ",$html);
$words = preg_split("/[\s,]+/", $html);

这个正则表达式是否会将所有非(A-Z,a-z,带有umlauts的a o u)字符替换为空格?我失去了像zugänglich等umlauts单词。

这个正则表达式有什么问题吗?

编辑:

我用preg_replace替换了ereg_replace,但是某些特殊字符如::,®不能被替换为空格...


1
为什么不直接使用preg_split,并将[^A-Za-zäÄÜüÖö]模式放在其中?此外,ereg_replace自5.3.0版本起已被弃用,因此我不会使用它。 - Matt Ellen
2
ereg_replace()自5.3版本起已被弃用,建议使用preg_replace() - powtac
3个回答

3

如果您的方法成功与编码有关。当所有重音符号被剥离时,很可能您的源文本(或php脚本)被编码为UTF-8。

在这种情况下,最好使用:

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

这将匹配所有字母字符,不仅限于变音符号。而/u可以解决您可能遇到的字符集问题。


0

也许你的umlauts仍然是包含非字母数字字符的HTML实体(& auml;等),这些字符将被删除...

顺便说一下:字母数字不仅限于a-Z,还包括数字...


0

正则表达式应该是/[^A-Za-zäÄÜüÖö]+/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接