PHP 中文字符串截取

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值