可能重复:
PHP:替换 utf-8 字符串中的无效字符
我有一个字符串,其中包含无效字符(它不是 UTF-8),例如以下显示 SUB:
我认为这是某种外国无效字符。
PHP中有没有办法获取一个字符串并使用preg_replace
或其他方法来确保我只在我的字符串中使用有效的UTF-8字符,而其他任何东西都会被删除?
谢谢。
首先,没有无效的 UTF-8 字符。存在无效的 UTF-8 字节和字节序列,这意味着有人试图对您的服务器发起编码攻击。这些可以使用mb_check_encoding
即将到来的输入数据进行验证,如果您没有获得有效的 UTF-8,则会立即失败并返回 400 Bad Request。
你所拥有的只是 SUBSTITUTE 控制字符,一个有效但不可打印的字符。
最初旨在用作传输控制字符,以指示已接收到乱码或无效字符。当不需要它提供的带内错误信号时,它通常被用于其他目的,特别是在使用强大的错误检测和纠正方法的情况下,或者在错误预计足够少以使使用该字符的情况下其他目的为宜。
您可以使用此正则表达式来摆脱它(以及其他一些):
$reg = '/(?![\r\n\t])[\p{Cc}]/u';
preg_replace( $reg, "", $str );