亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享

 更新時(shí)間:2016年03月17日 16:14:13   投稿:goldensun  
這篇文章主要介紹了編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享,文中利用了PHP中mb_strlen函數(shù)的實(shí)現(xiàn)原理,需要的朋友可以參考下

有時(shí)候我們需要計(jì)算一個(gè)字符串中包含的字?jǐn)?shù),對(duì)于純英文字符串,字?jǐn)?shù)等于字符串長(zhǎng)度,用
strlen函數(shù)即可獲得,但如果字符串中包含中文怎辦?mb_strlen可以實(shí)現(xiàn),但不幸沒裝擴(kuò)展,那就自己實(shí)現(xiàn)一下吧。

php有一個(gè)擴(kuò)展一般是必裝的,我們可以使用mb_strlen來(lái)獲取字符串中的字?jǐn)?shù),用法一般如下:

$len = mb_strlen("你是我的小蘋果","utf-8");


如愿獲得字符串長(zhǎng)度:7.

如果沒裝mb擴(kuò)展呢?自己實(shí)現(xiàn)一下吧。

我們要先明白一個(gè)事實(shí):字符串是由字符組成的,而字符是由字節(jié)表示的,每個(gè)英文字符是一個(gè)字節(jié),對(duì)應(yīng)一個(gè)ascii碼,英文字符的ascii碼是小于128的,也就是十六進(jìn)制的 0x80 .當(dāng)一個(gè)字節(jié)的ascii碼超過(guò)了127,那就說(shuō)明當(dāng)前字節(jié)不是一個(gè)完整的字符。

比如

$str = "你是我的小蘋果";

中的$str{0}可以取到第一個(gè)字節(jié),我們來(lái)看一下它是啥:

php > $str = "你是我的小蘋果";
php > echo $str{0};
�

是個(gè)亂碼,它只是

復(fù)制代碼 代碼如下:
       
字的字節(jié)之一,也就是說(shuō),
復(fù)制代碼 代碼如下:

這個(gè)字符是由超過(guò)一個(gè)字節(jié)組成的,我們這樣試試:

php > echo $str{0}.$str{1}.$str{2};


可以看到,將三個(gè)字節(jié)連在一起輸出,就成了一個(gè)完整的

復(fù)制代碼 代碼如下:

至于這里為什么是三個(gè)字節(jié),而不是兩個(gè)或4個(gè)?這個(gè)取決于字符串的編碼,我這里控制臺(tái)默認(rèn)是utf8編碼的,在PHP中,一個(gè)utf8字符是用三個(gè)字節(jié)表達(dá)的,如果是gbk編碼,則會(huì)是兩個(gè)字節(jié)。至于編碼和字節(jié)的關(guān)系,這個(gè)話題比較大,一篇說(shuō)不完,請(qǐng)參考這篇文章:字符編碼筆記:ascii,unicode和utf8 。

知道了這些,我們就可以自己編寫一個(gè)字?jǐn)?shù)檢查的函數(shù)了,大致流程如下:

1.for循環(huán)遍歷字節(jié) 2.判斷字節(jié)編碼是否 >= 0x80,是的話跳過(guò)N個(gè)字節(jié)

我寫了個(gè)簡(jiǎn)單的函數(shù),可以判斷gbk或utf8字符串的長(zhǎng)度,僅供參考:

<?php

function mbstrlen($str,$encoding="utf8")
{

  if (($len = strlen($str)) == 0) {
    return 0;
  }

  $encoding = strtolower($encoding);

  if ($encoding == "utf8" or $encoding == "utf-8") {
    $step = 3;
  } elseif ($encoding == "gbk" or $encoding == "gb2312") {
    $step = 2;
  } else {
    return false;
  }

  $count = 0;
  for ($i=0; $i<$len; $i++) {
    $count++;
    //如果字節(jié)碼大于127,則根據(jù)編碼跳幾個(gè)字節(jié)
    if (ord($str{$i}) >= 0x80) {
      $i = $i + $step - 1;//之所以減去1,因?yàn)閒or循環(huán)本身還要$i++
    }
  }
  return $count;
}

echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk");
echo mbstrlen("你是我的小蘋果");

相關(guān)文章

  • laravel 框架實(shí)現(xiàn)無(wú)限級(jí)分類的方法示例

    laravel 框架實(shí)現(xiàn)無(wú)限級(jí)分類的方法示例

    這篇文章主要介紹了laravel 框架實(shí)現(xiàn)無(wú)限級(jí)分類的方法,結(jié)合實(shí)例形式分析了Laravel框架基于遞歸遍歷實(shí)現(xiàn)無(wú)限極分類輸出的相關(guān)控制器及視圖操作技巧,需要的朋友可以參考下
    2019-10-10
  • PHP實(shí)現(xiàn)登錄注冊(cè)之BootStrap表單功能

    PHP實(shí)現(xiàn)登錄注冊(cè)之BootStrap表單功能

    登錄與注冊(cè)是我們?cè)趙eb開發(fā)中最常見的模塊,也是我們?nèi)粘I钪薪?jīng)常接觸的功能。下面通過(guò)本文給大家分享PHP實(shí)現(xiàn)登錄注冊(cè)之BootStrap表單功能,需要的朋友參考下吧
    2017-09-09
  • PHP簡(jiǎn)單的MVC框架實(shí)現(xiàn)方法

    PHP簡(jiǎn)單的MVC框架實(shí)現(xiàn)方法

    在PHP中使用MVC越來(lái)越流行了,特別是在一些開源的框架當(dāng)中。本篇給大家介紹php簡(jiǎn)單的mvc框架實(shí)現(xiàn)方法,對(duì)php簡(jiǎn)單的mvc框架相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • SQL注入寬字節(jié)注入由淺到深學(xué)習(xí)

    SQL注入寬字節(jié)注入由淺到深學(xué)習(xí)

    這篇文章主要為大家介紹了SQL注入寬字節(jié)注入由淺到深學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • phpstorm配置php運(yùn)行環(huán)境的詳細(xì)步驟

    phpstorm配置php運(yùn)行環(huán)境的詳細(xì)步驟

    這篇文章主要介紹了phpstorm配置php運(yùn)行環(huán)境的詳細(xì)步驟,首先安裝phpstrom,按照提示的步驟一步一步來(lái)就行,文中給大家介紹了phpstorm的簡(jiǎn)單配置,需要的朋友可以參考下
    2023-09-09
  • tp5 sum某個(gè)字段相加得到總數(shù)的例子

    tp5 sum某個(gè)字段相加得到總數(shù)的例子

    今天小編就為大家分享一篇tp5 sum某個(gè)字段相加得到總數(shù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • PHP抽獎(jiǎng)算法程序代碼分享

    PHP抽獎(jiǎng)算法程序代碼分享

    這篇文章主要分享了PHP抽獎(jiǎng)算法程序設(shè)計(jì),抽獎(jiǎng)在日常生活中大家都會(huì)接觸到,用php如何實(shí)現(xiàn)抽獎(jiǎng)算法,需要了解的朋友可以參考一下
    2015-10-10
  • laravel-admin 管理平臺(tái)獲取當(dāng)前登陸用戶信息的例子

    laravel-admin 管理平臺(tái)獲取當(dāng)前登陸用戶信息的例子

    今天小編就為大家分享一篇laravel-admin 管理平臺(tái)獲取當(dāng)前登陸用戶信息的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • thinkphp自帶驗(yàn)證碼全面解析

    thinkphp自帶驗(yàn)證碼全面解析

    這篇文章主要介紹了thinkphp自帶驗(yàn)證碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • PHP利用超級(jí)全局變量$_GET來(lái)接收表單數(shù)據(jù)的實(shí)例

    PHP利用超級(jí)全局變量$_GET來(lái)接收表單數(shù)據(jù)的實(shí)例

    下面小編就為大家?guī)?lái)一篇PHP利用超級(jí)全局變量$_GET來(lái)接收表單數(shù)據(jù)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11

最新評(píng)論