关于截取utf8字符串函数的问题

时间:2023-01-01 19:00:52
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
    return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str);
}

上面这个函数我用着还好,不过当字符串太长的时候(比如上万字的文章),其就无法正常工作了,返回会为空。比如utf8Substr($str, 0, 100)可以正常工作,但如果是utf8Substr($str, 1000, 100),其就无法正常工作了。

请问大家这个问题怎么解决呢?我认为其似乎开始的地方不能偏移太多,就是$from不能太大,那么能不能反向截取呢?本人对正则实在很白痴,请大家看看怎么解决呢?

5 个解决方案

#1


用 mb_substr函数实现同样功能

#2


mb_substr不会出现乱码吗?上面那个函数一般不会出现乱码。

#3


不会乱码的。。。第四个参数指定编码。使用方式查手册

#4


好的,我试试!

#5


好了,多谢,结贴!

#1


用 mb_substr函数实现同样功能

#2


mb_substr不会出现乱码吗?上面那个函数一般不会出现乱码。

#3


不会乱码的。。。第四个参数指定编码。使用方式查手册

#4


好的,我试试!

#5


好了,多谢,结贴!