欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql 字符串長度計算實現代碼(gb2312+utf8)

 更新時間:2011年12月16日 16:54:13   作者:  
PHP對中文字符串的處理一直困擾于剛剛接觸PHP開發(fā)的新手程序員。下面簡要的剖析一下PHP對中文字符串長度的處
PHP對中文字符串的處理一直困擾于剛剛接觸PHP開發(fā)的新手程序員。下面簡要的剖析一下PHP對中文字符串長度的處理:

PHP自帶的函數如strlen()、mb_strlen()都是通過計算字符串所占字節(jié)數來統計字符串長度的,一個英文字符占1字節(jié)。例:

$enStr = 'Hello,China!';
echo strlen($enStr); // 輸出:12

而中文則不然,做中文網站一般會選擇兩種編碼:gbk/gb2312或是utf-8。utf-8能兼容更多的字符,所以受到很多站長的喜愛。gbk與utf-8對中文的編碼不同,導致中文在gbk與utf-8編碼下所占字節(jié)也有差異。

gbk編碼下每個中文字符所占字節(jié)為2,例:

$zhStr = '您好,中國!';
echo strlen($zhStr); // 輸出:12

utf-8編碼下每個中文字符所占字節(jié)為3,例:

$zhStr = '您好,中國!';
echo strlen($zhStr); // 輸出:18

那么如何計算這組中文字符串的長度呢?有人可能會說gbk下獲取中文字符串長度除以2,utf-8編碼下除以3不就行了嗎?但是您要考慮字符串并不老實,99%的情況會以中英混合的情況出現。

這是WordPress中的一段代碼,主要思想就是先用正則將字符串分解為個體單元,然后再計算單元的個數即字符串的長度,代碼如下(只能處理utf-8編碼下的字符串):
復制代碼 代碼如下:

$zhStr = '您好,中國!';
$str = 'Hello,中國!';

// 計算中文字符串長度
function utf8_strlen($string = null) {
// 將字符串分解為單元
preg_match_all("/./us", $string, $match);
// 返回單元個數
return count($match[0]);
}
echo utf8_strlen($zhStr); // 輸出:6
echo utf8_strlen($str); // 輸出:9

utf8_strlen – 獲得UTF8編碼的字符串的長度
復制代碼 代碼如下:

/*
* 用于UTF8編碼的程序
* 獲得字符串的長度,一個中文表示3個長度
* itlearner注釋
*/
function utf8_strlen($str) {
$count = 0;
for($i = 0; $i < strlen($str); $i++){
$value = ord($str[$i]);
if($value > 127) {
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return $count;
}

相關文章

  • MySQL的WHERE語句中BETWEEN與IN的使用教程

    MySQL的WHERE語句中BETWEEN與IN的使用教程

    這篇文章主要介紹了MySQL的WHERE語句中BETWEEN與IN的使用教程,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-12-12
  • 登錄mysql報錯Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)解決方法

    登錄mysql報錯Can‘t connect to MySQL server&n

    這篇文章主要給大家介紹了登錄mysql報錯 Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)解決方法,文中有詳細的解決步驟,需要的朋友可以參考下
    2023-09-09
  • MySQL中使用MD5加密的實現

    MySQL中使用MD5加密的實現

    本文主要介紹了MySQL中使用MD5加密的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • MySQL里實現類似SPLIT的分割字符串的函數

    MySQL里實現類似SPLIT的分割字符串的函數

    SQL對字符串的處理能力比較弱,比如我要循環(huán)遍歷象1,2,3,4,5這樣的字符串,如果用數組的話,遍歷很簡單,但是T-SQL不支持數組,所以處理下來比較麻煩
    2012-09-09
  • Mysql之如何根據.frm和.idb文件恢復表結構

    Mysql之如何根據.frm和.idb文件恢復表結構

    這篇文章主要介紹了Mysql之如何根據.frm和.idb文件恢復表結構問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Linux下安裝MySQL8.0.11的教程

    Linux下安裝MySQL8.0.11的教程

    這篇文章主要介紹了Linux下安裝MySQL8.0.11的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • MYSQL命令行導入導出數據庫詳解

    MYSQL命令行導入導出數據庫詳解

    這篇文章主要詳細介紹了MYSQL命令行進行導入導出數據庫操作的方法,并且分win系統和Linux系統介紹了mysql備份和還原的方法,非常的詳細,希望對大家能有所幫助
    2014-09-09
  • mysql回表查詢是什么,回表查詢的使用

    mysql回表查詢是什么,回表查詢的使用

    這篇文章主要介紹了mysql回表查詢是什么,回表查詢的使用方式,具有很好的參考價值,希望對大家有所幫助。
    2022-11-11
  • MySQL 的啟動選項和系統變量實例詳解

    MySQL 的啟動選項和系統變量實例詳解

    這篇文章主要介紹了MySQL 的啟動選項和系統變量,結合實例形式詳細分析了MySQL 啟動選項和系統變量具體原理、功能、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • mysql聚合統計數據查詢緩慢的優(yōu)化方法

    mysql聚合統計數據查詢緩慢的優(yōu)化方法

    這篇文章主要給大家介紹了關于mysql聚合統計數據查詢緩慢的優(yōu)化方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02

最新評論