如何在PHP中替换/删除UTF-8字符串中的4(+) - 字节字符?

Fra*_*anz 31 php mysql utf-8

看起来MySQL 不支持默认UTF-8字符集中超过3个字节的字符.

那么,在PHP中,我如何摆脱字符串中的所有4个(和多个)字节,并用其他字符替换它们?

gle*_*len 42

注意:你不应该只是剥离,而是用替换字符U + FFFD替换以避免unicode攻击,主要是XSS:

http://unicode.org/reports/tr36/#Deletion_of_Noncharacters

preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $value);
Run Code Online (Sandbox Code Playgroud)


nwe*_*hof 13

由于4字节UTF-8序列始终以字节开头0xF0-0xF7,因此以下内容应该有效:

$str = preg_replace('/[\xF0-\xF7].../s', '', $str);
Run Code Online (Sandbox Code Playgroud)

或者,您可以preg_replace在UTF-8模式下使用,但这可能会更慢:

$str = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $str);
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为4字节UTF-8序列用于补充Unicode平面中的代码点0x10000.