Jor*_*sen 5 php string mixed multibyte
我想检查PHP上是否是字符串类型多字节.有任何想法如何实现这一目标?
例:
<?php!
$string = "I dont have idea that is what i am...";
if( is_multibyte( $string ) )
{
echo 'yes!!';
}else{
echo 'ups!';
}
?>
Run Code Online (Sandbox Code Playgroud)
也许(规则8字节):
<?php
if( mb_strlen( $string ) > strlen() )
{
return true;
}
else
{
return false;
}
?>
Run Code Online (Sandbox Code Playgroud)
我读到: 可变宽度编码 - WIKI和 UTF-8 - WIKI
我不确定是否有更好的方法,但想到的一个快速方法是:
if (mb_strlen($str) != strlen($str)) {
echo "yes";
} else {
echo "no";
}
Run Code Online (Sandbox Code Playgroud)
有两种解释.首先是每个字符都是多字节的.第二个是字符串至少包含一个多字节字符.如果您有兴趣处理无效字节序列,请参阅/sf/answers/958675511/以获取详细信息.
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)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6729 次 |
| 最近记录: |