最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP獲取中英混合字符串長度的方法

 更新時間:2014年06月07日 17:22:57   作者:  
這篇文章主要介紹了PHP獲取中英混合字符串長度的方法,需要的朋友可以參考下

今晚在寫框架的表單驗證類時,需要判斷某個字符串長度是否在指定區(qū)間內(nèi),很自然地,想到了PHP中的strlen函數(shù)。

復制代碼 代碼如下:

$str = 'Hello world!';
echo strlen($str); // 輸出12

然而在PHP自帶的函數(shù)中,strlen及mb_strlen都是通過計算字符串所占字節(jié)數(shù)來計算長度的,在不同的編碼情況下,中文所占的字節(jié)數(shù)是不同的。在GBK/GB2312下,中文字符占2個字節(jié),而在UTF-8下,中文字符占3個字節(jié)。
復制代碼 代碼如下:

$str = '你好,世界!';
echo strlen($str); // GBK或GB2312下輸出12,UTF-8下輸出18

而我們在判斷字符串長度時往往需要判斷的是字符的數(shù)量,而非字符串所占字節(jié)數(shù),如在UTF-8下的這段PHP代碼:
復制代碼 代碼如下:

$name = '張耕暢';
$len = strlen($name);
// 輸出 FALSE,因為在UTF-8下三個中文占9個字節(jié)
if($len >= 3 && $len <= 8){
 echo 'TRUE';
}else{
 echo 'FALSE';
}

那么有什么方便而實用的方法可以獲得含中文字符串的長度呢?可以用正則計算出中文字符的個數(shù),在GBK/GB2312編碼下除以2,UTF-8編碼下則除以3,最后再加上非中文字符串的長度,但這樣未免太過麻煩。

WordPress這么一段代碼,借鑒如下:

復制代碼 代碼如下:

$str = 'Hello,世界!';
preg_match_all('/./us', $str, $match);
echo count($match[0]); // 輸出9

思想是用正則表達式將字符串分割成單個字符,并直接用count計算出匹配到的字符數(shù),便是我們想要的結(jié)果了。

但以上代碼在UTF-8編碼下并不能處理GBK/GB2312的中文字符串,因為GBK/GB2312的中文字符會被識別為兩個字符而計算出來的中文字符數(shù)量會翻倍,于是我想到了這么一個辦法:

復制代碼 代碼如下:

$tmp = @iconv('gbk', 'utf-8', $str);
if(!empty($tmp)){
 $str = $tmp;
}
preg_match_all('/./us', $str, $match);
echo count($match[0]);

可兼容GBK/GB2312及UTF-8編碼,經(jīng)小量數(shù)據(jù)測試通過,但暫未確定是否完全正確,盼有大牛指點一二。

以上本意是為了框架可以兼容多種編碼格式,但一般在日常開發(fā)中,一個項目是已經(jīng)可以確定為何種編碼的,因此可以使用以下函數(shù)來方便地獲取字符串長度:

復制代碼 代碼如下:

int iconv_strlen ( string $str [, string $charset = ini_get("iconv.internal_encoding") ] )

相關(guān)文章

  • curl 出現(xiàn)錯誤的調(diào)試方法(必看)

    curl 出現(xiàn)錯誤的調(diào)試方法(必看)

    下面小編就為大家?guī)硪黄猚url 出現(xiàn)錯誤的調(diào)試方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • PHP抽象類與接口的區(qū)別詳解

    PHP抽象類與接口的區(qū)別詳解

    今天小編就為大家分享一篇關(guān)于PHP抽象類與接口的區(qū)別詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • php文件讀取方法實例分析

    php文件讀取方法實例分析

    這篇文章主要介紹了php文件讀取方法,實例分析了php讀取文件行、字符、固定位置等的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • php中將時間差轉(zhuǎn)換為字符串提示的實現(xiàn)代碼

    php中將時間差轉(zhuǎn)換為字符串提示的實現(xiàn)代碼

    通過傳入數(shù)據(jù)庫中存儲的文章發(fā)表時的UNIX時間戳,來轉(zhuǎn)化為例如 幾分鐘前,幾小時前,幾天前 這樣的提示。
    2011-08-08
  • PHP isset()及empty()用法區(qū)別詳解

    PHP isset()及empty()用法區(qū)別詳解

    這篇文章主要介紹了PHP isset()及empty()用法區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • php格式化json函數(shù)示例代碼

    php格式化json函數(shù)示例代碼

    這篇文章主要介紹了php格式化json函數(shù),結(jié)合實例形式分析了php使用自定義函數(shù)實現(xiàn)json格式化的方法,涉及php數(shù)組轉(zhuǎn)json、流程控制及字符串操作等技巧,需要的朋友可以參考下
    2016-05-05
  • PHP文件生成的圖片無法使用CDN緩存的解決方法

    PHP文件生成的圖片無法使用CDN緩存的解決方法

    這篇文章主要介紹了PHP文件生成的圖片無法使用CDN緩存的解決方法,這里的PHP生成圖片是指src地址是一個PHP文件的圖片,如果不做CDN,服務器的壓力會非常大,本文就講解了如何加進CDN的方法,需要的朋友可以參考下
    2015-06-06
  • PHP封裝的PDO數(shù)據(jù)庫操作類實例

    PHP封裝的PDO數(shù)據(jù)庫操作類實例

    這篇文章主要介紹了PHP封裝的PDO數(shù)據(jù)庫操作類,結(jié)合具體實例形式分析了php基于PDO針對數(shù)據(jù)庫的增刪改查、事務、批量添加等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • PHP中散列密碼的安全性分析

    PHP中散列密碼的安全性分析

    這篇文章主要介紹了PHP中散列密碼的安全性,結(jié)合實例形式分析了php基本哈希函數(shù)安全性問題及相關(guān)解決方案,需要的朋友可以參考下
    2019-07-07
  • PHP+Mysql+jQuery實現(xiàn)發(fā)布微博程序 jQuery篇

    PHP+Mysql+jQuery實現(xiàn)發(fā)布微博程序 jQuery篇

    我們在QQ個人中心或者新浪微博等網(wǎng)站上可以看到一個發(fā)表話題的應用
    2011-10-10

最新評論

琼海市| 巫溪县| 改则县| 澄迈县| 清流县| 宁夏| 集贤县| 巴塘县| 同江市| 永仁县| 龙井市| 竹溪县| 淳化县| 博兴县| 策勒县| 济宁市| 西贡区| 涡阳县| 甘德县| 永德县| 毕节市| 色达县| 诸城市| 东乌珠穆沁旗| 兰州市| 阿图什市| 宜兰县| 黄平县| 荥阳市| 宜君县| 嵩明县| 阜南县| 平阳县| 镇沅| 高州市| 兴山县| 昔阳县| 涪陵区| 阿拉善右旗| 永嘉县| 商丘市|