preg_replace 删除非打印字符似乎也删除所有外来字符

2024-03-20

在将值插入数据库之前,我使用以下正则表达式从用户输入中删除非打印控制字符。

 preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value)

在 utf-8 字符串上使用它有问题吗?它似乎完全删除了所有非 ASCII 字符。


部分问题在于您没有将目标视为 UTF-8 字符串;而是将其视为 UTF-8 字符串。你需要/u对此的修饰符。此外,在 UTF-8 中,任何非 ASCII 字符都由两个或多个字节表示,所有字节都在范围内\x80..\xFF。尝试这个:

preg_replace('/\p{Cc}+/u', '', $value)

\p{Cc}是控制字符的 Unicode 属性,并且u导致正则表达式和目标字符串都被视为 UTF-8。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

preg_replace 删除非打印字符似乎也删除所有外来字符 的相关文章

随机推荐