在php中,可以利用strlen()函數來計算字串的位元組數。此函數是按位元組來計算字串長度的,可以統計字串所佔的字元長度(位元組數),語法「strlen(字串)」。在這個函數的計算中,英文逗號、數字、英文字母、小數點等都只佔一個位元組;而一個GB2312編碼的漢字佔兩個位元組,一個UTF-8編碼的漢字佔三個位元組。
本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦
php中不同的編碼格式下字元佔用的位元組是不同的:
ANSI編碼格式下一個中文字元佔2個位元組,一個英文字元佔1個位元組;
UTF-8編碼格式下一個中文字元佔3個字節,一個英文字元佔1個位元組。
而php中,可以利用strlen()函數來計算字串的位元組數。
strlen()函數是按位元組來計算字串長度的。
strlen($string)
此函數只接受一個參數$string(要計算的字串),如果該參數傳遞的值為空則傳回 0。
strlen()函數中,(英文狀態下)逗號、數字、英文字母、小數點.
、底線、空格等都只佔一個字元長度(位元組).
<?php header("Content-type:text/html;charset=utf-8"); $str = "hello world!"; echo '字符串 “'.$str.'” 占:'.strlen($str).' 个字节<br>'; ?>
分析:上例的字串中,有10個英文字母,一個空格、一個英文感嘆號;合計:12個位元組。
strlen()函數中,一個 GB2312 編碼的漢字佔兩個字元長度(位元組),一個 UTF-8 編碼的漢字佔三個字元長度(位元組)。
<?php header("Content-type:text/html;charset=utf-8"); $str = "!"; echo '字符串 “'.$str.'” 占:'.strlen($str).' 个字节<br>'; ?>
上例中,"!"是中文感嘆號,因此佔三個位元組。
<?php header("Content-type:text/html;charset=utf-8"); $str = "欢迎"; echo '字符串 “'.$str.'” 占:'.strlen($str).' 个字节<br>'; ?>
上例中,包含兩個漢字,因此佔6個位元組。
<?php header("Content-type:text/html;charset=utf-8"); $str = "hello,欢迎来到这里!"; echo '字符串 “'.$str.'” 占:'.strlen($str).' 个字节<br>'; ?>
上例中,包含5個英文字符,6個漢字,一個中文感嘆號和一個中文逗號;因此佔5 (8*3)=29個字節。
說明:在計算字串的字元數時,strlen()函數只能處理英文字串,對中文或中英混合字串不友善。此時,就需要利用
mb_strlen()函數了,該函數可以按字元
來計算字串長度的。
擴充知識:mb_strlen() 函數
mb_strlen() 函數同樣可以傳回字串的長度,語法格式如下:
mb_strlen($str [, $encoding = mb_internal_encoding()])
#$str 為需要計算長度的字串
$encoding 是可選參數,為字元編碼,如果省略則使用內部字元編碼。
mb_strlen() 函數的傳回值為具有 $encoding 編碼的字串 $str 所包含的字元數,如果 $encoding 無效則傳回 false。
注意:與 strlen() 函數不同,在 mb_strlen() 函數中,無論是漢字,或是英文、數字、小數點、底線和空格,都只佔一個字元長度。
【範例】 使用 mb_strlen() 函數取得字串長度。
<?php header("Content-type:text/html;charset=utf-8"); $str = "hello 你好!"; echo '字符串 “'.$str.'” 的长度为:'.mb_strlen($str,"utf-8").'<br>'; $str = "欢迎来到PHP中文网!"; echo '<br>字符串 “'.$str.'” 的长度为:'.mb_strlen($str,'utf-8').'<br>'; ?>
可以看出,我們可以透過設定對應的$encoding
參數,就能很好的處理中文字串的長度問題。
推薦學習:《PHP影片教學》
以上是php怎麼計算字串佔多少位元組的詳細內容。更多資訊請關注PHP中文網其他相關文章!