我尝试过滤一个允许使用字母数字,空格,带重音符号和单引号的变量,并用空格替换剩余字符,这样的字符串就如:
替代率%? vendredi 23火星洛斯·德阿塔克
应输出:
替换火星人的火星之火
但是我得到的结果是:
在Mars lors de l上进行替换或更换
请帮忙,这是我的代码
$whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/";
$descreption = preg_replace($whitelist, ' ', $ds);
}else{
$errors = self::DESCREPTION_ERROR;
return false;
}
答案 0 :(得分:2)
您的正则表达式有问题。 а-à
部分给出了错误Character range is out of order
-我猜是在错误的地方添加了-
...
然后是一个小提示:’
不是'
[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ]
应该工作正常。
答案 1 :(得分:1)
处理重音字符范围的一种方法是使用POSIX [:alnum:]
类,该类在PHP中结合u
修饰符将匹配所有它们。然后可以将其与要保留的其他字符一起放入否定的字符类中,以允许删除其他字符:
$string = 'substitué à une otage % ? vendredi 23 mars lors de l’attaque';
echo preg_replace("/[^[:alnum:]'’,.]/u", ' ', $string);
输出:
substitué à une otage vendredi 23 mars lors de l’attaque
正如注释中所指出的,’
与'
不同,因此还需要将其添加到要保留的字符集中。
答案 2 :(得分:0)
您可以看看Unicode character properties。
我的更改摘要:
\p{L}
来匹配所有字母\-
)'
)和印刷(’
)撇号这是结果:
$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';
可能还有进一步改进的空间。最后,不要忘记添加u
modifier!