[英]Preg-replace not removing '§'?
这段代码:
$text = preg_replace("/[^\s\-\_\@a-zA-Z0-9äáàëéèíìöóòúùñçÀÁÈÉÊÌÍÒÓÙÚ.,;]/", "", $text);
成功删除*°+等特殊字符? ECC。 我想保存空格,“ - ”,“_”,“@”,字母,数字,重音符号,“。,;”,“ñ”和“ç”,没有别的。 它工作正常,但它无法删除:§
这只是一个例子,所以我可以制定一个特殊规则,但我担心它也不能删除其他字符。 这是为什么? 我怎样才能完全删除上面列出的所有内容?
您想使用u
( Unicode )修饰符。 通过将此修饰符放在正则表达式模式之后,它指定PCRE的其他功能,并将Pattern字符串视为UTF-8 。
$text = preg_replace('/[^a-zA-Z0-9äáàëéèíìöóòúùñçÀÁÈÉÊÌÍÒÓÙÚ\s@.,;_-]/u', '', $text);
您可以按如下方式修改角色类:
$text = preg_replace('/[^\pL\pN\s.,;@_-]+/u', '', $text);
Unicode属性\\pL
包括常规az
字符和重音字符。 \\pN
将匹配任何脚本中的任何数字字符; 如果需要,可以将其更改回0-9
。
§
(又名:SECTION SIGN)用utf8编码: c2 a7
ç
(又名:带有CEDILLA的LATIN SMALL LETTER C)在utf8中编码: c3 a7
正则表达式引擎默认情况下认为每个字节都是一个字符。 如果我写这样的东西:
echo dechex(ord(preg_replace('~[^ç]~', '', '§')));
我将获得a7
因为否定的字符类包含所有不是“字符” c3
和a7
。
你可以告诉正则表达式引擎模式字符串是用u
修饰符编码的utf8。 使用此修饰符ç
不再被视为两个分隔的字节,而是一组代表一个字符的字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.