本文目錄一覽:
PHP字符串長度計算 – strlen()函數使用介紹
strlen()函數和mb_strlen()函數
在PHP中,函數strlen()返回字符串的長度。函數原型如下:
複製代碼
代碼如下:
int
strlen(string
string_input);
參數string_input為要處理的字符串。
strlen()函數返回字符串所佔的字節長度,一個英文字母、數字、各種符號均佔一個字節,它們的長度均為1。一個中午字符佔兩個字節,所以一個中午字符的長度是2。例如
複製代碼
代碼如下:
?php
echo
strlen(“”);
echo
strlen(“三知開發網”);
?
“echo
strlen(“”);”的運行結果:15
“echo
strlen(“三知開發網”);”的運行結果:15
這裡有一個疑問,一個中文字符不是佔2個字節嗎?“三知開發網”,明明是五個漢字,運行的結果怎麼會是15?
原因出在這裡:strlen()計算時,對於一個UTF-8的中文字符,會把它當做長度為3來處理。當出現中英文混排的情況下,怎麼準確的計算字符串的長度呢?這裡,得引入另外一個函數mb_strlen()。mb_strlen()函數的用法與strlen()幾乎一摸一樣,只是多了一個指定字符集編碼的參數。函數原型為:
複製代碼
代碼如下:
int
mb_strlen(string
string_input,
string
encode);
PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得到的只是字符串所佔的字節數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在UTF-8編碼下,一個漢字佔3個字節)。
因此,下面的代碼能準確計算出中文字符串的長度:
複製代碼
代碼如下:
?php
$str
=
“三知sunchis開發網”;
echo
strlen($str).”br”;
//結果:22
echo
mb_strlen($str,”UTF8″).”br”;
//結果:12
$strlen
=
(strlen($str)+mb_strlen($str,”UTF8″))/2;
echo
$strlen;
//結果:17
?
原理分析:
strlen()計算時,對待UTF-8的中文字符長度是3,所以“三知sunchis開發網”的長度為5×3+7×1=22
在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字符當作長度1來計算,所以“三知sunchis開發網”長度為5×1+7×1=12
剩下的就是純數學問題了,在此就不啰嗦了……
注意:對於mb_strlen($str,’UTF-8′),如果省略第二個參數,則會使用PHP的內部編碼。內部編碼可以通過mb_internal_encoding()函數得到。需要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在並且沒有被注釋掉,否則會出現未定義函數的問題。
php如何獲取字符串長度,中文、符號、英文字母都算作一個?
一般情況下 有漢字的時候 是使用 mb_strlen 這個函數來計算字符長度
這個函數需要開啟 mb_string擴展 默認都是不開啟的
php strlen utf8一個中文算3個字節嗎?
utf8是變長編碼, 不一定是3字節, 可能是2~3, 當然ASCII字符還是1字節.gbk也是變長編碼, 非ASCII的2字節, ASCII還是1字節.這兩個編碼對於非ASCII字符, 都是多字節的, 並且多字節字符每個字節都是127的, 也就是負數(最高位是1).另外, PHP里的strlen不是依靠判斷字符串結尾的, 因為PHP是腳本語言, 它的字符串和C++的string是一樣的, 將存儲的字節個數當作字符串長度.另外, PHP里想數數有多少個字節用strlen, 想數數有多少個字符, 用mb系列函數, 自己去了解一下.還有些需求, 比如字符串匹配查找之類的, gbk是存在雙字節匹配問題的, 兩個連續漢字的中間2個字節可能被誤認為其他字符, 所以不能用strstr之類的字節匹配函數(PHP里是純字節匹配的, 不關心), 但utf-8是可以的, 它不會有類似的衝突, 另外最好的做法當然還是用mb系列, 安全可靠, 而且還支持猜編碼功能.
原創文章,作者:DQKM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133842.html