检查PHP中是否是多字节字符串

时间:2013-05-29 18:42:32

标签: php string multibyte mixed

我想检查PHP上是否是字符串类型多字节。 知道如何实现这个目标吗?

示例:

<?php!
$string = "I dont have idea that is what i am...";
if( is_multibyte( $string ) )
{
    echo 'yes!!';
}else{
    echo 'ups!';
}
?>

可能(规则8字节):

<?php
if( mb_strlen( $string ) > strlen() )
{
    return true;
}
else
{
    return false;
}
?>
  

我看了:   Variable width encoding - WIKI和   UTF-8 - WIKI

4 个答案:

答案 0 :(得分:7)

有两种解释。首先是每个字符都是多字节的。第二个是字符串至少包含一个多字节字符。如果您有兴趣处理无效字节序列,请参阅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)
);

答案 1 :(得分:6)

我不确定是否有更好的方法,但想到的一个快速方法是:

if (mb_strlen($str) != strlen($str)) {
    echo "yes";
} else {
    echo "no";
}

答案 2 :(得分:1)

如果您要验证字符串,请使用 ctype_alpha() 功能

$text = 'insert your text here';

if (ctype_alpha($text)){
echo 'it is text';
}else{
echo 'it is not tex';
}

答案 3 :(得分:1)

要确定某些内容是否为多字节,您需要具体说明您正在使用的字符集。例如,如果您的字符集是Latin1,则没有字符串将是多字节的。如果您的字符集是UTF-16,则每个字符串都是多字节的。

也就是说,如果你只关心一个特定的字符集,比如utf-8,你可以使用mb_strlen < strlen测试,如果你明确指定了编码参数。

function is_multibyte($s) {
  return mb_strlen($s,'utf-8') < strlen($s);
}