使用preg_replace清理字符串,但允许拉丁字符

时间:2013-01-14 02:49:49

标签: php regex character-encoding preg-replace

我要做的是清理字符串(html标签,额外的空格,引号......),但我想承认标点符号和ñ字符等拉丁字符。我尝试过这个,但我无法弄清楚为什么没有按预期工作:

代码

//Removing special characters
$str = preg_replace('/[^;\sa-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ]+/', '', $str);
//Deleting extra white spaces
$str = preg_replace('/\s+/', ' ', $str); 

实施例

in:       Película; Films; @Cine; Añoranza; <html></body>foo "bar    ";
out:      pelcula; Films; Cine; Aoranza;  foo bar
expected: Película; Films; Cine; Añoranza; foo bar

问题:

我的代码有什么问题,我该如何解决?因为拉丁字符部分是唯一没有处理表达式的部分。

加号:如何将两个正则表达式合并为一个?

2 个答案:

答案 0 :(得分:4)

如果您使用的是UTF-8,则需要使用u标志。

$str = preg_replace('/[^;\sa-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ]+/u', '', $str);

确保您的数据库连接是utf-8和您的php源文件 物理编码是utf-8,它都可以工作。你的正则表达式不会神奇地成为一个HTML解析器。

答案 1 :(得分:0)

你也可以使用这个(更好看的)方法:

$str = preg_replace('/[^\p{Latin}]+/u', '', $str);