入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP 中文字符串截取

创建时间:2016-12-25 投稿人: 浏览次数:294

本文提供两种方法实现中文字符串的截取

1.使用系统提供的 mb_substr() 或 iconv_substr() 函数(php.ini 配置文件中的 mbstring 扩展要开启才能使用):

函数说明:

string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

参数:

str    从该 string 中提取子字符串。

start    str 中要使用的第一个字符的位置。

length    str 中要使用的最大字符数。

encoding    字符编码。如果省略,则使用内部字符编码

例子:

$str = "是sdw来的abcde";
echo mb_substr($str,0,5,"utf-8") . "<br/>";  // 输出:是sdw来

iconv_substr()  函数的用法同 mb_substr() 。

2.自己编写一个字符串截取函数解决:

/**
 * 中文字符串截取
 * @param string      $str    待截取的字符串
 * @param int|integer $start  开始位置
 * @param int|null    $length 截取长度,默认截取到字符串末尾
 */
function UTF8Substr($str, $start = 0, $length = NULL)
{
    $count = 0;
    $offset = $start;
    $len = strlen($str);
    for ($i=0; $i < $len; $i++) {
        if (($count - $start) == $length) {
            break;
        }
        if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", substr($str, $i, 1))) {
            $i += 2;
        }
        ++$count;
        if ($count == $start) {
            $offset = $i + 1;
        }
    }
    return substr($str, $offset, $length?($i - $offset):strlen($str));
}
测试用例:
$str = "a是df浏览未dfsdfads";
var_dump(UTF8Substr($str, 3, 5)); // 输出:f浏览未d
var_dump(UTF8Substr($str, 3));    // 输出:f浏览未dfsdfads
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。