如何使用 PHP 检测 4 字节字符

Won*_*ane 2 php unicode

我需要帮助来使用 PHP 检测字符串何时包含 4 字节字符。是否有内置函数或正则表达式可以有效地做到这一点?

我发现这篇文章讨论了替换,但我找不到仅检测的工作示例。

php可以检测4字节编码的utf8字符吗?

这就是我所得到的,但它也失败了:

$chars = str_split($term);
foreach ($chars as $char) {
    if (strlen($char) >= 4) {
        print "Found 4-byte character\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

Dha*_*man 6

可以使用正则表达式来匹配BMP之外的所有字符,即上面的Unicode空间中的所有字符U+FFFF

\n\n
$str = \'\xe2\x82\xacA\xc2\xa2\';\n\n$r = preg_match_all(\'|[\\x{10000}-\\x{10FFFF}]|u\', $str, $matches);\n\nvar_dump($matches[0]);\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里尝试一下: https: //3v4l.org/JX9aQ

\n\n

有趣的事实。如果您使用 PHP 7.4,您可以使用mb_str_split()array_filter()完成此操作。我不认为它比正则表达式更有效,但很高兴知道。

\n\n
$nonBMP = array_filter(mb_str_split($str), fn($c) => strlen($c)==4);\n
Run Code Online (Sandbox Code Playgroud)\n