php計算字元的個數和位元組,php中一個漢字占幾個位元組

本文目錄一覽:

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-tw/n/133842.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DQKM的頭像DQKM
上一篇 2024-10-04 00:01
下一篇 2024-10-04 00:01

相關推薦

  • 英語年齡用連字元號(Hyphenation for English Age)

    英語年齡通常使用連字元號表示,比如 “five-year-old boy”。本文將從多個方面探討英語年齡的連字元使用問題。 一、英語年齡的表達方式 英語中表…

    編程 2025-04-29
  • Python字元轉列表指南

    Python是一個極為流行的腳本語言,在數據處理、數據分析、人工智慧等領域廣泛應用。在很多場景下需要將字元串轉換為列表,以便於操作和處理,本篇文章將從多個方面對Python字元轉列…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 進擊的漢字拆字窗

    進擊的漢字拆字窗是一款非常有用的中文工具,它可以幫助人們更好的學習漢字,了解漢字的含義,以及更好的了解漢字在中文中的運用和意義。 一、功能介紹 進擊的漢字拆字窗主要有以下幾個功能:…

    編程 2025-04-29
  • Python計算中文字元個數

    本文將從多個方面對Python計算中文字元個數進行詳細的闡述,包括字元串長度計算、正則表達式統計和模塊使用方法等內容。 一、字元串長度計算 在Python中,計算字元串長度是非常容…

    編程 2025-04-29
  • Python中如何判斷字元為數字

    判斷字元是否為數字是Python編程中常見的需求,本文將從多個方面詳細闡述如何使用Python進行字元判斷。 一、isdigit()函數判斷字元是否為數字 Python中可以使用i…

    編程 2025-04-29
  • Python中逗號算字元嗎

    Python中逗號既可以作為分隔符,也可以作為一個表達式中的運算符。關於逗號作為分隔符是不會被算作字元的事情,這點大家都知道。本文主要就是闡述逗號作為運算符在表達式中是會被算作字元…

    編程 2025-04-28
  • Python中的位元組類數據

    Python作為其中一個最廣泛使用的編程語言之一,提供了多種數據類型來幫助開發者實現各種需求。在這些數據類型中,位元組類數據(bytes)是一個被廣泛使用的類型。本文將會從各個方面詳…

    編程 2025-04-28
  • 從16進位轉義到中文字元

    16進位轉義是為了在不同的字符集、不同的編碼下,能夠保證特殊字元被正確的識別和渲染。本文將從多個方面對16進位轉義做詳細的闡述,讓讀者對其有更深入的了解。 一、轉義實現 在Web開…

    編程 2025-04-28
  • 如何在Python中輸出漢字和數字

    本文將從多個方面詳細介紹如何在Python中輸出漢字和數字,並提供代碼示例。 一、輸出漢字 要在Python中輸出漢字,需要先確保Python默認編碼是utf-8,這可以通過在代碼…

    編程 2025-04-28

發表回復

登錄後才能評論