我有一个字符串,其中包含无效字符(不是UTF-8),例如以下显示SUB:
我认为这是一种外国无效的角色。
在PHP中是否有一种方法可以使用字符串并使用preg_replace
或其他内容来确保我只在字符串中使用有效的UTF-8字符,而其他任何内容都会被删除?
感谢。
答案 0 :(得分:1)
首先,没有无效的UTF-8字符。 UTF-8字节和字节序列无效,这意味着有人试图在您的服务器上进行编码攻击。这些可以在即将到来的输入数据上使用mb_check_encoding
进行验证,如果您没有获得有效的UTF-8,则会立即失败并返回400 Bad Request。
你所拥有的只是SUBSTITUTE控制字符,一个有效的字符,但不可打印。
最初打算用作传输控制字符 表示已收到乱码或无效字符。它有 当带内信令时,经常被用于其他目的 它提供的错误是不必要的,特别是在强大的方法的情况下 使用错误检测和纠正,或者预期错误 非常罕见,可以将角色用于其他目的 可取的。
您可以使用此正则表达式来删除它(and a few others):
$reg = '/(?![\r\n\t])[\p{Cc}]/u';
preg_replace( $reg, "", $str );
答案 1 :(得分:0)