溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php怎么截取utf8或gbk編碼的中英文字符串

發(fā)布時(shí)間:2021-09-10 17:53:50 來源:億速云 閱讀:118 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“php怎么截取utf8或gbk編碼的中英文字符串”,在日常操作中,相信很多人在php怎么截取utf8或gbk編碼的中英文字符串問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php怎么截取utf8或gbk編碼的中英文字符串”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

微博的發(fā)言有字?jǐn)?shù)限制,其計(jì)數(shù)方式是,中文算2個(gè),英文算1個(gè),全角字符算2個(gè),半角字符算1個(gè)。
php中自帶strlen是返回的字節(jié)數(shù),對于utf8編碼的中文返回時(shí)3個(gè),不滿足需求。
mb_strlen 可以根據(jù)字符集計(jì)算長度,比如utf8的中文計(jì)數(shù)為1,但這不符合微博字?jǐn)?shù)限制需求,中文必須計(jì)算為2才可以。
google了下,找到一個(gè)discuz中截取各種編碼字符的類,改造了下,已經(jīng)測試通過.其中參數(shù)$charset 只支持gbk與utf-8。

復(fù)制代碼 代碼如下:

$a = "s@@你好";
var_dump(strlen_weibo($a,'utf-8'));

結(jié)果輸出為8,其中字母s計(jì)數(shù)為1,全角@計(jì)數(shù)為2,半角@計(jì)數(shù)為1,兩個(gè)中文計(jì)數(shù)為4。源碼如下:

復(fù)制代碼 代碼如下:

function strlen_weibo($string, $charset='utf-8')
{
    $n = $count = 0;
    $length = strlen($string);
    if (strtolower($charset) == 'utf-8')
    {
        while ($n < $length)
        {
            $currentByte = ord($string[$n]);
            if ($currentByte == 9 ||
                $currentByte == 10 ||
                (32 <= $currentByte && $currentByte <= 126))
            {
                $n++;
                $count++;
            } elseif (194 <= $currentByte && $currentByte <= 223)
            {
                $n += 2;
                $count += 2;
            } elseif (224 <= $currentByte && $currentByte <= 239)
            {
                $n += 3;
                $count += 2;
            } elseif (240 <= $currentByte && $currentByte <= 247)
            {
                $n += 4;
                $count += 2;
            } elseif (248 <= $currentByte && $currentByte <= 251)
            {
                $n += 5;
                $count += 2;
            } elseif ($currentByte == 252 || $currentByte == 253)
            {
                $n += 6;
                $count += 2;
            } else
            {
                $n++;
                $count++;
            }
            if ($count >= $length)
            {
                break;
            }
        }
        return $count;
    } else
    {
        for ($i = 0; $i < $length; $i++)
        {
            if (ord($string[$i]) > 127)
            {
                $i++;
                $count++;
            }
            $count++;
        }
        return $count;
    }
}

到此,關(guān)于“php怎么截取utf8或gbk編碼的中英文字符串”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI