我在mysql 5.1服务器中使用utf8字符集mysql表,该服务器不支持表中的utf8mb4编码。插入4字节编码的utf8字符(如"𡃁","𨋢","𠵱","𥄫","𠽌","唧","𠱁")时。该表将弹出错误或跳过以下文本。

如何以编程方式检测PHP中4字节编码的utf8字符并将其替换?

最佳答案

以下正则表达式将替换4字节UTF-8字符:

function replace4byte($string, $replacement = '') {
    return preg_replace('%(?:
          \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
    )%xs', $replacement, $string);
}

var_dump(replace4byte('d'), replace4byte('d𡃁d'));

这不依赖于/u修饰符,因此您不必担心编译PCRE的UTF-8。但是,如果有此支持,则deceze的preg_replace_callback会更整洁。

(正则表达式改自Ensuring valid utf-8 in PHP)

关于php - php可以检测4字节编码的utf8字符吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16496554/

10-11 21:51