如何在PHP中替换/删除UTF-8字符串中的4(+)字节字符?
MySQL似乎不支持默认UTF-8字符集中字节超过3个字节的字符。
那么,在PHP中,我如何摆脱字符串中的所有4(及以上)字节字符,并用其他字符替换它们?
MySQL似乎不支持默认UTF-8字符集中字节超过3个字节的字符。
那么,在PHP中,我如何摆脱字符串中的所有4(及以上)字节字符,并用其他字符替换它们?
注意:您不应该只是剥离,而是用替换字符U + FFFD替换以避免Unicode攻击,主要是XSS:
http://unicode.org/reports/tr36/#Deletion_of_Noncharacters
preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $value);
由于 4 字节 UTF-8 序列总是以字节开头,因此以下方法应该有效:0xF0-0xF7
$str = preg_replace('/[\xF0-\xF7].../s', '', $str);
或者,您可以在 UTF-8 模式下使用,但这可能会更慢:preg_replace
$str = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $str);
这是有效的,因为 4 字节 UTF-8 序列用于从 开始的补充 Unicode 平面中的码位。0x10000