php函数substr、mb_substr、mb_strcut截取中文比较

一、函数说明
    substr、mb_substr、mb_strcut这三个函数都用来截取字符串,所不同的是:substr是最简单的截取,无法适应中文;mb_substr是按字来切分字符串,而mb_strcut是按字节来切分字符串,截取中文都不会产生半个字符的现象。
    这三个函数的前三个参数完全一致,即:
第一个参数是操作对象
第二个参数是截取的起始位置
第三个参数是截取的数量
    mb_substr和mb_strcut还有第四个参数:第四个参数可以根据不同的字符集进行设置

  1. <?php
  2. //对待一个UTF8的中文字符是3个长度
  3. //对待一个gbk的中文字符是2个长度
  4. header("content-Type:text/html;charset=utf-8");
  5. //设置内部编码
  6. mb_internal_encoding(‘UTF-8‘);
  7. //测试
  8. $cn_str="钓鱼岛是中国的hehe";
  9. $en_str="this is just a test";
  10. //使用substr
  11. echo substr($cn_str,0,3).‘<br/>‘; //钓
  12. echo substr($en_str,0,3).‘<br/><br/>‘;   //thi
  13. //使用mbsubstr()
  14. echo "mb_substr-3:".mb_substr($cn_str,0,3).‘<br/>‘;   //钓鱼岛    按照字来划分
  15. echo "substr-3:".substr($cn_str,0,3).‘<br/>‘;//钓   按照字节来划分
  16. echo "mb_strcut-3:".mb_strcut($cn_str,0,3).‘<br/><br/>‘; //钓   按照字节来划分
  17. echo "mb_substr-4:".mb_substr($cn_str,0,4).‘<br/>‘;   //钓鱼岛    按照字来划分
  18. echo "substr-4:".substr($cn_str,0,4).‘<br/>‘; //钓   按照字节来划分(出现乱码)
  19. echo "mb_strcut-4:".mb_strcut($cn_str,0,4).‘<br/><br/>‘; //钓   按照字节来划分(不会出现乱码)
  20. echo strlen($cn_str).‘<br/>‘;   //26
  21. echo mb_strlen($cn_str).‘<br/>‘;  //12
  22. echo iconv_strlen($cn_str).‘<br/>‘;//26
  23. ?>

三、结论
        substr、mb_strcut表现都不够理想,mb_substr可以正常使用,但前提是要安装php扩展库,否则就要自己写一个适应各种情况的截取函数了。

时间: 2024-10-06 11:31:16

php函数substr、mb_substr、mb_strcut截取中文比较的相关文章

substr(),mb_substr()及mb_strcut函数用法与区别

substr()函数 substr(string,start,length) string表示要截取的对象,start表示从哪个位置开始截取,0表示从头开始,正数表示从这个数的位置后面截取,负数表示从结尾算开始截取的位置,但依然是从左到右截,length表示截取长度.负数表示排除或忽略结尾多少个字符.比如:  代码如下 复制代码 <?php $siteurl = 'www.111cn.net';print_r (substr($siteurl,4));exit; //则返回:  111cn.ne

解决出现乱码substr截取中文字符 siluke123

siluke123< ?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');?>输出:这样一来我的字< ?phpecho mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');?>输出:这样 string mb_strcut ( string $str , int $start [, int $length [, string $encoding ] )mb_strcut() 和 m

用到了函数substr与iconv_substr,mb_substr

<html> <head><meta charset='utf-8'> <title>截取中文字符串_脚本之家_www.jb51.net</title> </head> <body> <?php $str='123脚本之家456欢迎大家的光临'; echo substr($str,0,4); echo '<br>'; echo iconv_substr($str,0,4,'utf-8'); echo '&

PHP截取字符串函数substr()函数实例用法详解

在PHP中有一项非常重要的技术,就是截取指定字符串中指定长度的字符.PHP对于字符串截取可以使用PHP预定义函数substr()函数来实现.下面就来介绍一下substr()函数的语法及其应用. substr()函数语法格式如下:大理石平台厂家 1 substr(string, start, length); substr()函数参数说明如下: 参 数 说 明 string 指定字符串对象 start 指定开始截取字符串的位置.如果参数start为负数,则从字符串的末尾开始截取 length 可选

自定义一个函数截取中文字符串

/** * 截取中文字符串 * @param unknown $str 要截取的字符串 * @param unknown $encode 字符编码 * @param unknown $start 开始位置 * @param string $len 要截取的长度 * @return string */function getStr($str,$encode,$start,$len=null){ switch ($encode) { case 'utf8':$num = 3;break; case

字符串截取函数substr()

substr(参数1,参数2[,参数3]); 该系统函数返回被截后的子字符串,它接受2个必选参数,参数1为要截取的字符串,参数2为截取的开始位置,参数3可选,表示截取长度. 例子:substr("abcdef",1);//返回"bcdef",从索引1处开始截取,如果没有指定截取长度,默认截取后面的所有字符. substr("abcdef",1,3);//返回"bcd",从索引1处开始截取3个字符. substr("a

Oracle截取字符串的函数substr

Oracle截取字符串的函数substr substr Oracle中的截取字符串函数. 语法如下: substr( string, start_position, [ length ] ) 参数分析: string 字符串值 start_position 截取字符串的初始位置, Number型,start_position为负数时,表示从字符串右边数起. length 截取位数,Number型 其中,length为可选,如果length为空(即不填)则返回start_position后面的所有

php中截取中文字符会出现乱码的问题

php中内置函数substr()可以对指定字符串进行截取,不过,它只对全英文字符串的截取是比较适合的.如果字符串中出现了中文,就有可能导致截取后出现乱码的问题,甚至在一些场景中如json编码的时候会导致输出结果为null. 原因是不同字符集中每个字符占用的字节数不一样,如UTF-8编码中每个汉字占3字节,而GB2312汉字占2字节,英文则都只占1字节.确切的说substr()中后两个参数指定的是字节数量而不是字符数量,所以就有可能出现最后一个汉字字符截取不完整的情况从而出现中文乱码. 遇到中文字

php中计算中文字符串长度、截取中文字符串

在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理.在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务器,则只要在php.ini中开启即可.如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了. 以下几个函数用起来颇为顺手的.不过要知道,得在utf-8环境下使用. header