在将值插入数据库之前,我正在使用以下正则表达式从用户输入中去除非打印控制字符.
preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value)
Run Code Online (Sandbox Code Playgroud)
在utf-8字符串上使用它有问题吗?它似乎完全删除所有非ascii字符.
部分问题是您没有将目标视为UTF-8字符串; 你需要/u修改器.此外,在UTF-8中,任何非ASCII字符都由两个或多个字节表示,所有这些字节都在该范围内\x80..\xFF.试试这个:
preg_replace('/\p{Cc}+/u', '', $value)
Run Code Online (Sandbox Code Playgroud)
\p{Cc}是控制字符的Unicode属性,u导致正则表达式和目标字符串被视为UTF-8.
您可以使用Unicode字符属性
preg_replace('/[^\p{L}\s]/u','',$value);
Run Code Online (Sandbox Code Playgroud)
(添加您想要通过的其他课程)
如果你想将unicode恢复为ascii,绝不是全面的,但有一些很好的翻译:
echo iconv('utf-8','ascii//translit','éñó'); //prints 'eno'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9599 次 |
| 最近记录: |