搜尋
首頁後端開發php教程编写PHP程序检查字符串中的中文字符个数的实例分享_php实例

有时候我们需要计算一个字符串中包含的字数,对于纯英文字符串,字数等于字符串长度,用
strlen函数即可获得,但如果字符串中包含中文怎办?mb_strlen可以实现,但不幸没装扩展,那就自己实现一下吧。

php有一个扩展一般是必装的,我们可以使用mb_strlen来获取字符串中的字数,用法一般如下:

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


如愿获得字符串长度:7.

如果没装mb扩展呢?自己实现一下吧。

我们要先明白一个事实:字符串是由字符组成的,而字符是由字节表示的,每个英文字符是一个字节,对应一个ascii码,英文字符的ascii码是小于128的,也就是十六进制的 0x80 .当一个字节的ascii码超过了127,那就说明当前字节不是一个完整的字符。

比如

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

中的$str{0}可以取到第一个字节,我们来看一下它是啥:

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

是个乱码,它只是

复制代码 代码如下:
       
字的字节之一,也就是说,
复制代码 代码如下:

这个字符是由超过一个字节组成的,我们这样试试:
php > echo $str{0}.$str{1}.$str{2};


可以看到,将三个字节连在一起输出,就成了一个完整的

复制代码 代码如下:

至于这里为什么是三个字节,而不是两个或4个?这个取决于字符串的编码,我这里控制台默认是utf8编码的,在PHP中,一个utf8字符是用三个字节表达的,如果是gbk编码,则会是两个字节。至于编码和字节的关系,这个话题比较大,一篇说不完,请参考这篇文章:字符编码笔记:ascii,unicode和utf8 。

知道了这些,我们就可以自己编写一个字数检查的函数了,大致流程如下:

1.for循环遍历字节 2.判断字节编码是否 >= 0x80,是的话跳过N个字节

我写了个简单的函数,可以判断gbk或utf8字符串的长度,仅供参考:

<&#63;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++;
    //如果字节码大于127,则根据编码跳几个字节
    if (ord($str{$i}) >= 0x80) {
      $i = $i + $step - 1;//之所以减去1,因为for循环本身还要$i++
    }
  }
  return $count;
}

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

簡單指南:帶有PHP腳本的電子郵件發送簡單指南:帶有PHP腳本的電子郵件發送May 12, 2025 am 12:02 AM

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能:識別和修復瓶頸PHP性能:識別和修復瓶頸May 11, 2025 am 12:13 AM

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

PHP的依賴注入:快速摘要PHP的依賴注入:快速摘要May 11, 2025 am 12:09 AM

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

提高PHP性能:緩存策略和技術提高PHP性能:緩存策略和技術May 11, 2025 am 12:08 AM

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具