Home >php教程 >PHP源码 >PHP 截取中文字符串(支持多种编码)

PHP 截取中文字符串(支持多种编码)

PHP中文网
PHP中文网Original
2016-06-01 14:33:06908browse

通过使用多种方法来实现中文字符串的完美截取,在未安装mbstring 和 iconv扩展情况下支持UTF-8、GBK、GB2312、BIG5编码,安装上述扩展后支持的编码更多,详细情况参考函数说明。 
共有三种方法 
1、mb_substr() 需要 mbstring 扩展 
2、iconv_substr() 需要 iconv扩展 
3、正则匹配,默认支持 
三种方法优先顺序从上至下,上一种方法不可用则自动使用下一种方法。 

本代码从 Midnight 发布的 "字符串截取, 支持常用编码" 代码优化而来

1.修复原代码中对 mb_substr 和 iconv_substr 没有进行return ,所以相当于无效调用
2.优化截取字符串后缀,可以自定义后缀。默认为空。

<?php
/**
 * 字符串截取,支持中文和其他编码
 *
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断字符串后缀
 * @return string
 */
function substr_ext($str, $start=0, $length, $charset="utf-8", $suffix="")
{
    if(function_exists("mb_substr")){
         return mb_substr($str, $start, $length, $charset).$suffix;
	}
    elseif(function_exists(&#39;iconv_substr&#39;)){
         return iconv_substr($str,$start,$length,$charset).$suffix;
    }
    $re[&#39;utf-8&#39;]  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re[&#39;gb2312&#39;] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re[&#39;gbk&#39;]    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re[&#39;big5&#39;]   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("",array_slice($match[0], $start, $length));
    return $slice.$suffix;
}

                       

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn