有两种解释。首先是每个字符都是多字节的。二是字符串至少包含一个多字节字符。如果您对处理无效字节序列感兴趣,请参阅https://stackoverflow.com/a/13695364/531320了解详细信息。
function is_all_multibyte($string)
{
// check if the string doesn't contain invalid byte sequence
if (mb_check_encoding($string, 'UTF-8') === false) return false;
$length = mb_strlen($string, 'UTF-8');
for ($i = 0; $i < $length; $i += 1) {
$char = mb_substr($string, $i, 1, 'UTF-8');
// check if the string doesn't contain single character
if (mb_check_encoding($char, 'ASCII')) {
return false;
}
}
return true;
}
function contains_any_multibyte($string)
{
return !mb_check_encoding($string, 'ASCII') && mb_check_encoding($string, 'UTF-8');
}
$data = ['東京', 'Tokyo', '東京(Tokyo)'];
var_dump(
[true, false, false] ===
array_map(function($v) {
return is_all_multibyte($v);
},
$data),
[true, false, true] ===
array_map(function($v) {
return contains_any_multibyte($v);
},
$data)
);