您好,登錄后才能下訂單哦!
這篇文章主要介紹“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í)用的文章!
免責(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)容。