`

php判断字符串长度 strlen()与mb_strlen()函数

    博客分类:
  • PHP
阅读更多

strlen()

PHP strlen() 函数

定义和用法

strlen() 函数返回字符串的长度。

语法

strlen(string)

参数:string 
描述:必需。规定要检查的字符串。

 代码如下 复制代码


<?php 
$str=‘中文a字1符‘; 
echo strlen($str); 
echo ‘<br />‘; 
echo mb_strlen($str,‘UTF8‘); 
//输出结果 
//14 
//6 
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14 
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6


mb_strlen()函数

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保

“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

 代码如下 复制代码

<?php 
$str=‘中文a字1符‘; 
//计算如下 
echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2; 
echo 
//输出结果 
//10 
?>

“中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

讲解这两者之间的区别

 代码如下 复制代码


<?php

//测试时文件的编码方式要是UTF8

$str='中文a字1符';

echo strlen($str).'<br>';//14

echo mb_strlen($str,'utf8').'<br>';//6

echo mb_strlen($str,'gbk').'<br>';//8

echo mb_strlen($str,'gb2312').'<br>';//10

?> 

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen

计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .


虽然上面函数可以简单解决一些中英文混合问题,但是不能用于实实际中,下面我来给各位朋友介绍其它比较好的办

法。

PHP获取中英文混合字符串长度的实现代码如下,1中文=1位,2英文=1位,可自行修改

 代码如下 复制代码

/**
* PHP获取字符串中英文混合长度 
* @param $str string 字符串
* @param $$charset string 编码
* @return 返回长度,1中文=1位,2英文=1位
*/
function strLength($str,$charset='utf-8'){
if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);
$num = strlen($str);
$cnNum = 0;
for($i=0;$i<$num;$i++){
if(ord(substr($str,$i+1,1))>127){
$cnNum++;
$i++;
}
}
$enNum = $num-($cnNum*2);
$number = ($enNum/2)+$cnNum;
return ceil($number);
}

//测试输出长度都为15
$str1 = '测试测试测试测试测试测试测试测';
$str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
$str3 = 'aa测试aa测试aa测试aa测试aaaaaa';
echo strLength($str1,'gb2312');
echo strLength($str2,'gb2312');
echo strLength($str3,'gb2312');

截取字符串函数

UTF8编码,在UTF8中,一个中文字符占3个字节

 代码如下 复制代码

function msubstr($str, $start, $len) {
 $tmpstr = "";
 $strlen = $start + $len;
 for($i = 0; $i < $strlen; $i++){
  if(ord(substr($str, $i, 1)) > 127){
   $tmpstr.=substr($str, $i, 3);
   $i+=2;
  }else
   $tmpstr.= substr($str, $i, 1);
 }
 return $tmpstr;
}
echo msubstr("一二三天下致公english",0,10);

GB2312编码,在gb2312中,一个中文字符占2个字节

 代码如下 复制代码

<?php
function msubstr($str, $start, $len) {   //ȡ
   $tmpstr = "";
   $strlen = $start + $len;
   if(preg_match('/[/d/s]{2,}/',$str)){$strlen=$strlen-2;}
   for($i = 0; $i < $strlen; $i++) {
       if(ord(substr($str, $i, 1)) > 0xa0) {
           $tmpstr .= substr($str, $i, 2);
           $i++;
       } else
           $tmpstr .= substr($str, $i, 1);
     }
   return $tmpstr;
 }
  
?>

编码兼容性良好的函数

 代码如下 复制代码

function cc_msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
 if(function_exists("mb_substr"))
  return mb_substr($str, $start, $length, $charset);
 elseif(function_exists('iconv_substr')) {
  return iconv_substr($str,$start,$length,$charset);
 }
 $re['utf-8']   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff]

[/x80-/xbf]{3}/";
 $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re['gbk']   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re['big5']   = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
 preg_match_all($re[$charset], $str, $match);
 $slice = join("",array_slice($match[0], $start, $length));
 if($suffix) return $slice."…";
 return $slice;
}

 

 

 

来自:http://www.111cn.net/phper/php-cy/46325.htm

分享到:
评论

相关推荐

    php自动获取字符串编码函数mb_detect_encoding

    最后,了解一些基本的字符串操作函数也是必要的,如`strlen`用于计算字符串长度,`mb_strlen`则用于多字节字符串长度的计算,`substr`和`mb_substr`用于字符串截取,以及`trim`、`ltrim`和`rtrim`用于去除字符串的...

    判断是否为指定长度内字符串的php函数

    1. **`mb_strlen`**:这个函数用于计算多字节字符(如UTF-8编码)的字符串长度。与`strlen`不同,`mb_strlen`可以正确处理非ASCII字符,比如中文、日文等。 2. **`str_pad`**:这个函数可以将字符串填充到指定长度...

    php截取字符串函数的方法_.docx

    // 如果字符串长度小于或等于截断长度,则直接返回原字符串 if (mb_strlen($string) $cutlength) { return $string; } else { // 初始化变量 $totalLength = 0; $newWords = array(); // 使用wordwrap()...

    PHP程序设计-3期(KC016) 2.8.1字符串长度习题.doc

    这里我们关注的是字符串长度的计算,主要涉及`strlen()`和`mb_strlen()`两个函数。这两个函数用于获取字符串的长度,但它们在处理多字节字符(如中文字符)时有所不同。 1. `strlen()`函数是PHP内置的函数,用于...

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

    在处理字符串数组的过程中,使用`mb_strlen()`计算字符串的长度,此函数可以处理多字节字符,如UTF-8编码的中文字符。接着,`mb_substr()`函数用于截取字符串,它能处理不同编码格式的字符串。在此实验中,截取了...

    PHP针对字符串开头和结尾的判断方法

    ### 判断字符串开头 #### 1. `substr` + `===` ```php var_dump(substr($s1, 0, strlen($s2)) === $s2); ``` 这个方法通过`substr`函数截取 `$s1` 的前`strlen($s2)`个字符,然后用`===`比较这两个字符串是否相等...

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

    在PHP中,处理中英文混合的字符串长度判断和截取是一项常见的任务,特别是在网页内容的显示和处理上。本文提供了一种实现方案,通过自定义的`strLength`和`cut_str`函数来解决这个问题。 首先,我们来看`strLength`...

    php判断输入是否是纯数字,英文,汉字的方法

    这里利用php的mb_strlen和strlen函数就可以轻松得知字符串的构成是全英文、英汉混合、还是纯汉字。简要说明如下: 1、如果strlen返回的字符长度和mb_strlen以当前编码计算的长度一 致,可以判断是纯英文字符串。 2、...

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

    除了`assoc_substr`,还有其他一些函数和库可以帮助我们处理字符串,如`mb_substr`(多字节字符串截取)、`strlen`(获取字符串长度,对于非ASCII字符可能不准确)以及`iconv`和`preg_replace`等函数,它们可以用于...

    php自定义函数实现统计中文字符串长度的方法小结

    `mb_strlen()`函数的第二个参数可以指定字符串的编码,例如`'GBK'`,以准确计算中文字符串长度。但需要注意的是,如果没有安装MBstring扩展,该函数将无法正常工作。 ```php mb_strlen($str, 'GBK'); ``` 另外,...

    解析使用substr截取UTF-8中文字符串出现乱码的问题

    $str = ‘都知道strlen与mb_strlen是求字符串长度的函数’; echo strlen($str) . ' ' . mb_strlen($str, 'utf-8'); ``` `strlen($str)`返回66,因为它计算的是字节数,而`mb_strlen($str, 'utf-8')`返回34,...

    php实现字符串翻转的方法

    此函数的作用是反转中文字符串 mb_strlen() 获取字符的长度 mb_substr() 获取字符的单个元素 krsort() 按照键值逆序排序数组 implode() 将数组拼接为字符串 explode() 使用字符串分隔字符串 */ function str_rev_gb...

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

    因此,当使用strlen函数计算UTF-8编码下包含中文的字符串长度时,会导致计算结果与预期不符。 在实际开发中,我们通常需要判断的是字符串中字符的数量,而非字节数。例如,在UTF-8编码下,一个中文字符和一个英文...

    php截取汉字类

    - **gbk_strlen**: 计算字符串长度。 - **gbk_substr**: 截取字符串。 **实现原理:** - 如果系统已加载`mbstring`扩展,则使用`mb_strlen`和`mb_substr`函数进行处理。 - 如果未加载`mbstring`扩展,则通过正则...

    php简单截取字符串代码示例

    通过`mb_strlen()`获取字符串长度,以及`mb_substr()`进行安全的截取,我们可以创建一个功能完善的字符串截取函数,确保截取的字符串在语义上保持完整。此外,这个例子还展示了如何在截取过程中考虑语境,如寻找合适...

    php字符串操作针对负值的判断分析

    - `strlen()` 或 `mb_strlen()` 计算字符串长度,`mb_strlen()` 同样支持多字节字符。 6. **字符串和数组的互换**: PHP提供了一些函数,如 `explode()` 和 `implode()`,可以将字符串分割成数组,或将数组元素...

    PHP常用字符串函数小结(推荐)

    字符串长度方面,`strlen()`函数用于获取字符串的实际长度,不包含字符终止符。 字符串操作方面,`strrev()`函数用于翻转字符串,这在某些特定场景下可能需要,如处理文本格式化。最后,`mb_`类型函数是基于多字节...

    比较discuz和ecshop的截取字符串函数php版

    虽然在描述中没有提供具体的Ecshop函数代码,但通常来说,Ecshop会使用类似的方法来处理字符串,可能包括使用mb_strlen()和mb_substr()等函数来精确处理UTF-8编码的字符串。这些函数专门设计用于处理多字节字符集,...

    php字符串截取函数用法分析

    - **`mb_strcut()`**:与 `mb_substr` 类似,但可以处理字符串超出指定长度时的情况。 - **`iconv_substr()`**:用于转换编码的同时截取字符串,适用于处理不同编码的字符串。 4. **优劣分析**: - `substr()` ...

Global site tag (gtag.js) - Google Analytics