1

我想要做的是清理一个字符串(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

问题:

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

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

4

2 回答 2

4

u如果您使用 UTF-8,则需要使用flag。

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

确保您的数据库连接是 utf-8 并且您的 php 源文件物理编码是 utf-8 并且一切正常。不过,您的正则表达式不会神奇地成为 html 解析器。

于 2013-01-14T04:15:59.150 回答
0

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

$str = preg_replace('/[^\p{Latin}]+/u', '', $str);
于 2015-07-01T21:02:41.977 回答