php截取字符串之截取utf8或gbk編碼的中英文字符串示例
微博的發(fā)言有字數(shù)限制,其計數(shù)方式是,中文算2個,英文算1個,全角字符算2個,半角字符算1個。
php中自帶strlen是返回的字節(jié)數(shù),對于utf8編碼的中文返回時3個,不滿足需求。
mb_strlen 可以根據(jù)字符集計算長度,比如utf8的中文計數(shù)為1,但這不符合微博字數(shù)限制需求,中文必須計算為2才可以。
google了下,找到一個discuz中截取各種編碼字符的類,改造了下,已經(jīng)測試通過.其中參數(shù)$charset 只支持gbk與utf-8。
$a = "s@@你好";
var_dump(strlen_weibo($a,'utf-8'));
結果輸出為8,其中字母s計數(shù)為1,全角@計數(shù)為2,半角@計數(shù)為1,兩個中文計數(shù)為4。源碼如下:
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;
}
}
- 整理php防注入和XSS攻擊通用過濾
- PHP中防止SQL注入攻擊和XSS攻擊的兩個簡單方法
- PHP開發(fā)中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
- 細談php中SQL注入攻擊與XSS攻擊
- php過濾XSS攻擊的函數(shù)
- PHP實現(xiàn)表單提交數(shù)據(jù)的驗證處理功能【防SQL注入和XSS攻擊等】
- PHP實現(xiàn)的防止跨站和xss攻擊代碼【來自阿里云】
- PHP數(shù)組編碼gbk與utf8互相轉換的兩種方法
- PHP通過iconv將字符串從GBK轉換為UTF8字符集
- PHP常用工具函數(shù)小結【移除XSS攻擊、UTF8與GBK編碼轉換等】
相關文章
laravel手動創(chuàng)建數(shù)組分頁的實現(xiàn)代碼
這篇文章主要介紹了laravel手動創(chuàng)建數(shù)組分頁的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Yii使用ajax驗證顯示錯誤messagebox的解決方法
這篇文章主要介紹了Yii使用ajax驗證顯示錯誤messagebox的解決方法,可以自行設置Ajax提示信息的方式,是非常實用的技巧,需要的朋友可以參考下2014-12-12Zend Framework教程之分發(fā)器Zend_Controller_Dispatcher用法詳解
這篇文章主要介紹了Zend Framework教程之分發(fā)器Zend_Controller_Dispatcher用法,結合實例形式詳細分析了分發(fā)器Zend_Controller_Dispatcher的結構,功能,使用技巧與相關注意事項,需要的朋友可以參考下2016-03-03PHP實現(xiàn)的漢字拼音轉換和公歷農(nóng)歷轉換類及使用示例
這篇文章主要介紹了PHP實現(xiàn)的漢字拼音轉換和公歷農(nóng)歷轉換類及使用示例,精心整理自網(wǎng)上的資源,需要的朋友可以參考下2014-07-07php輸出1000以內(nèi)質(zhì)數(shù)(素數(shù))示例
這篇文章主要介紹了php輸出1000以內(nèi)質(zhì)數(shù)的示例,需要的朋友可以參考下2014-02-02php獲取網(wǎng)頁中圖片、DIV內(nèi)容的簡單方法
這篇文章主要介紹了php獲取網(wǎng)頁中圖片、DIV內(nèi)容的簡單方法,都是通過正則表達式實現(xiàn)的,強大的正則啊,需要的朋友可以參考下2014-06-06