我需要一个从字符串中删除所有字符(未在模式中列出)但保留外语字母的函数。我知道 preg_replace 有 \p “模式”,但由于某种原因我无法让它工作。
我使用这个函数来删除字符串中的所有垃圾:
$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
简而言之,该函数应该保留所有标准字母/数字和标准符号,如 +-!@#$ 等,并删除所有垃圾,如 © ™ 等。如果有比我使用的更好的方法来编写这样的 preg_replace,请告诉我。
现在,我想要该函数保留外文字母,所以我将其修改为
$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these
(您会注意到添加了 \p{L})。不幸的是,它没有按预期工作。当我回显文本时,我看到外语没有被删除(这很好),但它们被转换为 � (这很糟糕)。
我如何解决它?
\p{L} 仅适用于 u 修饰符:
$main_content=preg_replace("/[^\p{L}]/u", "", $main_content);
注意 / 之后添加的 u
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)