`
txf2004
  • 浏览: 7133314 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP中获取中英文混合字符串长度

 
阅读更多

今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数。

  1. $str='Hello world!';
  2. echo strlen($str); // 输出12

然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。

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

而我们在判断字符串长度时往往需要判断的是字符的数量,而非字符串所占字节数,如在UTF-8下的这段PHP代码:

  1. $name='张耕畅';
  2. $len=strlen($name);
  3. // 输出 FALSE,因为在UTF-8下三个中文占9个字节
  4. if($len>=3&&$len<=8){
  5. echo'TRUE';
  6. }else{
  7. echo'FALSE';
  8. }

那么有什么方便而实用的方法可以获得含中文字符串的长度呢?可以用正则计算出中文字符的个数,在GBK/GB2312编码下除以2,UTF-8编码下则除以3,最后再加上非中文字符串的长度,但这样未免太过麻烦。

WordPress这么一段代码,借鉴如下:

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

思想是用正则表达式将字符串分割成单个字符,并直接用count计算出匹配到的字符数,便是我们想要的结果了。

但以上代码在UTF-8编码下并不能处理GBK/GB2312的中文字符串(感谢oc_china提出),因为GBK/GB2312的中文字符会被识别为两个字符而计算出来的中文字符数量会翻倍,于是我想到了这么一个办法:

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

可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确,盼有大牛指点一二。

以上本意是为了框架可以兼容多种编码格式,但一般在日常开发中,一个项目是已经可以确定为何种编码的,因此可以使用以下函数来方便地获取字符串长度:

  1. inticonv_strlen(string$str[,string$charset=ini_get("iconv.internal_encoding")])




=======================签 名 档=======================

原文地址(我的博客):http://www.clanfei.com/2012/12/1671.html
欢迎访问交流,至于我为什么要多弄一个博客,因为我热爱前端,热爱网页,我更希望有一个更加自由、真正属于我自己的小站,或许并不是那么有名气,但至少能够让我为了它而加倍努力。。
=======================签 名 档=======================






分享到:
评论

相关推荐

    PHP针对中英文混合字符串长度判断及截取方法示例

    这就导致了在判断中英文混合字符串长度时不能直接使用strlen()函数,而截取字符串时也需要根据字符的编码规则来进行操作。 在本示例中,PHP函数strLength()通过遍历字符串,使用ord()函数获取每个字符的ASCII值,...

    PHP获取中英混合字符串长度的方法

    在PHP编程中,处理字符串长度是一项常见的任务,特别是在涉及到中英混合字符串时,问题变得更为复杂。PHP内置的`strlen()`函数默认是基于字节数计算字符串长度的,这意味着它不能准确地反映出含有中文字符的字符串的...

    php 截取中英文混合字符串的方法

    通过学习和使用如`assoc_substr`这样的自定义函数,我们可以确保在处理中英文混合字符串时获得预期的结果。同时,持续关注和学习PHP相关的字符串处理技巧和最佳实践,能够帮助我们编写出更高效、更健壮的代码。

    PHP 不区分中英文截取utf8字符串

    在PHP编程中,处理UTF-8编码的...通过分析这个示例,你可以更深入地理解如何在PHP中处理UTF-8编码的字符串,以及如何在中英文混合的情况下进行截取。记得打开文件查看具体的实现方式,以便学习和应用到自己的项目中。

    PHP指定截取字符串中的中英文或数字字符的实例分享

    总结以上内容,我们可以了解到在PHP中正确截取和过滤字符串,尤其是处理中英文混合字符串时,必须考虑到字符编码的差异,并使用适合多字节编码的函数。通过`mb_substr()`函数可以精确地截取中英文字符和数字,而通过...

    PHP程序设计-3期(KC016) 2.8.1字符串长度 拓展知识.doc

    本节将深入探讨PHP中的两种主要方法来获取字符串长度:`strlen()`和`mb_strlen()`。 首先,`strlen()`函数是PHP内建的用于计算字符串长度的函数,它返回字符串的字节数。然而,当涉及到非ASCII字符,如中文字符时,...

    PHP网站编程技术-字符串处理.doc

    接下来,定义了四个不同的字符串:纯中文、中英文混合、纯英文以及包含HTML符号的字符串,以便进行后续的处理和操作。 实验中定义了一个名为`str_rev_gb()`的自定义函数,其目的是翻转输入的字符串。函数内,通过`...

    中英文字符串翻转函数

    1. `mb_strlen`函数:这是PHP中用于计算字符串长度的多字节版本。它接受两个参数,第一个是待检测的字符串,第二个是字符串的编码格式。在这个例子中,我们使用`mb_strlen("luokuan", "UTF-8")`来获取字符串`$...

    PHP 中英文混合排版中处理字符串常用的函数

    ### PHP 中英文混合排版中处理字符串常用的函数 在PHP开发过程中,特别是在处理包含中文的字符串时,开发者经常会遇到各种编码、截取、反转等问题。本文将详细介绍几个用于处理中文混合排版中字符串的常用PHP函数,...

    字符串长度函数strlen和mb_strlen的区分示例介绍_.docx

    本文旨在深入探讨PHP中两种常用的字符串长度计算函数:`strlen`与`mb_strlen`。我们将从基本概念入手,通过实例演示这两种函数的区别,并讨论它们在不同场景下的应用。 #### strlen函数概述 `strlen`函数是PHP中最...

    用CSS解决中英文混合字符串的截取省略问题的解决办法

    ### 使用CSS解决中英文混合字符串的截取省略问题 #### 背景与需求 在Web开发过程中,经常会遇到需要展示大量文本信息的情况,如新闻列表、文章标题等。为了确保页面布局整洁美观,同时适应不同的屏幕尺寸,通常...

    PHP实现截取中文字符串不出现?号的解决方法

    这个问题在处理中英文混合的字符串时尤为突出。本文将详细介绍一种解决PHP截取中文字符串出现?号的方法。 首先,我们需要理解为什么会出现?号。在UTF-8编码中,一个中文字符由连续的三个字节表示,如果在截取字符串...

    php下关于中英数字混排的字符串分割问题

    这类字符串的特点是中文字符、英文字符、数字混合在一起,它们的编码方式不同,中文通常占两个字节,而英文和数字只占一个字节。在进行分割或截取时,需要特别注意这个问题,以免破坏字符的完整性。 上述问题中提到...

    php 字符串压缩方法比较示例

    同时,代码还展示了每个压缩方法在压缩中文字符串和英文数字混合字符串时的表现。 需要注意的是,示例代码中的字符串可能会有OCR扫描过程中的文字识别错误。在理解代码时,读者需要根据上下文内容来合理推断和理解...

    php支持中英文的加密解密类

    考虑到中英文混合的情况,该加密类可能使用了变长编码(如UTF-8)和适应中文的加密算法。例如,它可能会使用PHP的openssl扩展,结合特定的密钥和初始化向量(IV),实现对UTF-8编码的字符串的加密。同时,为了保证...

    JavaScript实现的GBK、UTF8字符串实际长度计算函数

    在处理字符串长度问题时,特别是在涉及到中文字符的编程场景中,常常会遇到与数据库兼容性相关的问题。在数据库中,比如MySQL,根据所使用的字符集(如GBK和UTF8),中文字符所占用的空间是不同的。GBK编码的中文...

Global site tag (gtag.js) - Google Analytics