摘要:在中常見的計(jì)算字符串長(zhǎng)度的函數(shù)有和當(dāng)字符全是英文字符的時(shí)候,兩者是一樣。這里主要比較一下,中英文混排的時(shí)候,兩個(gè)計(jì)算結(jié)果。
在php中常見的計(jì)算字符串長(zhǎng)度的函數(shù)有:strlen和mb_strlen.當(dāng)字符全是英文字符的時(shí)候,兩者是一樣。這里主要比較一下,中英文混排的時(shí)候,兩個(gè)計(jì)算結(jié)果。
在PHP中,strlen與mb_strlen是求字符串長(zhǎng)度的函數(shù),但是對(duì)于一些初學(xué)者來說,如果不看手冊(cè),也許不太清楚其中的區(qū)別。
下面通過例子,講解這兩者之間的區(qū)別。
先看例子:
";//10 echo mb_strlen($str,"utf8")."
";//7 echo mb_strlen($str,"gbk")."
";//6 echo mb_strlen($str,"gb2312")."
";//6 echo mb_strlen($str)."
";//10 ?>
結(jié)果分析:在strlen計(jì)算時(shí),對(duì)待一個(gè)gbk的中文字符是2個(gè)長(zhǎng)度,所以“中文a字1符”長(zhǎng)度是2*4+2=10,在mb_strlen計(jì)算時(shí),選內(nèi)碼為gbk時(shí),會(huì)將一個(gè)中文當(dāng)做一個(gè)字符長(zhǎng)度來處理。
利用這兩個(gè)函數(shù)則可以聯(lián)合計(jì)算出一個(gè)中英文混排的串的占位是多少(一個(gè)中文字符的占位是2,英文字符是1)
echo (strlen($str) + mb_strlen($str,"UTF8")) / 2;
例如 “中文a字1符” 的strlen($str)值是10,mb_strlen($str)值是6,則可以計(jì)算出“中文a字1符”的占位是10.
echo mb_internal_encoding();
PHP內(nèi)置的字符串長(zhǎng)度函數(shù)strlen無法正確處理中文字符串,它得 到的只是字符串所占的字節(jié)數(shù)。對(duì)于GB2312的中文編碼,strlen得到的值是漢字個(gè)數(shù)的2倍,而對(duì)于UTF-8編碼的中文,就是3倍的差異了(在 UTF-8編碼下,一個(gè)漢字占3個(gè)字節(jié))。
采用mb_strlen函數(shù)可以較好地解決這個(gè)問題。mb_strlen的用法和 strlen類似,只不過它有第二個(gè)可選參數(shù)用于指定字符編碼。例如得到UTF-8的字符串$str長(zhǎng)度,可以用 mb_strlen($str,"UTF-8")。如果省略第二個(gè)參數(shù),則會(huì)使用PHP的內(nèi)部編碼。內(nèi)部編碼可以通過 mb_internal_encoding()函數(shù)得到。
需要注意的是,mb_strlen并不是PHP核心函數(shù),使用前需要確保在php.ini中加載了php_mbstring.dll,即確?!癳xtension=php_mbstring.dll”這一行存在并且沒有被注釋掉,否則會(huì)出現(xiàn)未定義函 數(shù)的問題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31955.html
摘要:字符串變量被解析。很顯然,代表,代表獲取字符串的長(zhǎng)度對(duì)于英文數(shù)字字母。你好,截取字符串對(duì)于純英文字符,可以使用對(duì)于中文字符,可以使用例如你好,世界查找字符串查找字符串,有內(nèi)置函數(shù)代表,應(yīng)該代表。當(dāng)然也有函數(shù)用于處理其他編碼的字符串。 1. 單引號(hào)和雙引號(hào) PHP可以在單引號(hào)或者雙引號(hào)中包含字符串。但是單引號(hào)和雙引號(hào)有所區(qū)別。 單引號(hào)包含的內(nèi)容會(huì)被認(rèn)為是普通字符串 雙引號(hào)中允許包含字符...
摘要:我的博客運(yùn)行以下代碼互聯(lián)網(wǎng)產(chǎn)品我們可能以為會(huì)得到的結(jié)果是互聯(lián)網(wǎng)產(chǎn)品,實(shí)際結(jié)果是互聯(lián)網(wǎng)產(chǎn)。所以在執(zhí)行的時(shí)候,通過字節(jié)比對(duì),會(huì)將去掉,導(dǎo)致了最后出現(xiàn)了亂碼。 我的博客 https://mengkang.net/1039.html 運(yùn)行以下代碼: $tag = 互聯(lián)網(wǎng)產(chǎn)品、; $text = rtrim($tag, 、); print_r($text); 我們可能以為會(huì)得到的結(jié)果是互聯(lián)網(wǎng)產(chǎn)品...
摘要:變量的打印與類似支持打印普通類型數(shù)據(jù)打印打印什么都不打印可以打印多個(gè)參數(shù)打印只能支持一個(gè)參數(shù)打印可以打印結(jié)構(gòu)類型數(shù)據(jù)打印打印打印語句語句的另一種寫法這種寫法常用語與混編時(shí)使用混編例子成年人小朋友雙引號(hào)與單引號(hào)的區(qū)別單引號(hào)支持轉(zhuǎn)義和變量解析獲 變量的打印 if語句的另一種寫法 這種寫法常用語php與html混編時(shí)使用 混編例子 成年人 小朋友 $arr = [1,2,3,4];...
摘要:變量的打印與類似支持打印普通類型數(shù)據(jù)打印打印什么都不打印可以打印多個(gè)參數(shù)打印只能支持一個(gè)參數(shù)打印可以打印結(jié)構(gòu)類型數(shù)據(jù)打印打印打印語句語句的另一種寫法這種寫法常用語與混編時(shí)使用混編例子成年人小朋友雙引號(hào)與單引號(hào)的區(qū)別單引號(hào)支持轉(zhuǎn)義和變量解析獲 變量的打印 if語句的另一種寫法 這種寫法常用語php與html混編時(shí)使用 混編例子 成年人 小朋友 $arr = [1,2,3,4];...
摘要:前言最近開發(fā)遇到后端生成圖片時(shí)英文的換行貼代碼字符串相關(guān)處理英文字符串換行如果是字母,并且到了換行的地方,則需要看這個(gè)字符的下一個(gè)字符是否是字母,如果是的話就需要回到上一個(gè)不是字母的地方注意中文和英文上一次出現(xiàn)不是字母的索引位置將單個(gè)字符存 前言 最近開發(fā)遇到后端生成圖片時(shí)英文的換行 貼代碼 /* * 字符串相關(guān)處理 */ class StringUtils { /** ...
閱讀 1778·2023-04-25 23:43
閱讀 962·2021-11-24 09:39
閱讀 744·2021-11-22 15:25
閱讀 1744·2021-11-22 12:08
閱讀 1118·2021-11-18 10:07
閱讀 2103·2021-09-23 11:22
閱讀 3374·2021-09-22 15:23
閱讀 2608·2021-09-13 10:32