我要做的是清理字符串(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
我的代码有什么问题,我该如何解决?因为拉丁字符部分是唯一没有处理表达式的部分。
加号:如何将两个正则表达式合并为一个?
答案 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);