php 字符串 中文,php 中文字符串截取乱码
发布日期:2021-10-31 15:52:20 浏览次数:3 分类:技术文章

本文共 1494 字,大约阅读时间需要 4 分钟。

PHP截取字符串如果是英文直接用substr就可以了,但对于中文字符,用substring可能会导致乱码,那么将如何解决呢?

1、通过函数mb_substr实现

说明:mb_substr($str, $start, $length, $encoding);通过该函数即可,但需要加载php_mbstring.dll扩展。

案例:<?php

$str = '这是一个字符串切割函数';

echo "mb_substr:".mb_substr($str, 0, 7, 'utf-8');

?>

2、通过函数mb_strcut实现

说明:mb_strcut() 和 mb_substr() 类似,都是从一个字符串中提取子字符串,但是按字节数来执行,而不是字符个数。 如果截断位置位于多字节字符两个字节的中间,将于该字符的第一个字节开始执行。 这也是和 substr() 函数的不同之处,后者简单地将字符串在字节之间截断,这将导致一个畸形的字节序列。

3、通过编写的函数(支持UTF-8和GB2312)

案例:<?php

/*

Utf-8、gb2312都支持的汉字截取函数

cut_str(字符串, 截取长度, 开始长度, 编码);

编码默认为 utf-8

开始长度默认为 0

*/

function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')

{

$string = str_replace(array('&', '"', ''), array('&', '"', ''), $string);

if($code == 'UTF-8')

{

$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";

preg_match_all($pa, $string, $t_string);

if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";

return join('', array_slice($t_string[0], $start, $sublen));

}

else

{

$start = $start*2;

$sublen = $sublen*2;

$strlen = strlen($string);

$tmpstr = '';

for($i=0; $i

{

if($i>=$start && $i

{

if(ord(substr($string, $i, 1))>0xa0)

{

$tmpstr.= substr($string, $i, 2);

}

else

{

$tmpstr.= substr($string, $i, 1);

}

}

if(ord(substr($string, $i, 1))>0xa0) $i++;

}

if(strlen($tmpstr)

return $tmpstr;

}

}

$str = "这是一个字符串切割函数";

echo cut_str($str, 8, 0, 'gb2312');

?>

转载地址:https://blog.csdn.net/weixin_39987847/article/details/115172689 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:对一个java源文件进行正确编译,给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确的是()...
下一篇:php注册页面模板,选项卡式WordPress登陆注册模板

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月19日 21时57分05秒