PHP-php截取中文字符串

发布于 2016-12-12 15:32:08 字数 281 浏览 1285 评论 3

$str = 'aadfsaf范德萨¥#发大水发23232fdsaf@!aa我';  
$tmp = array();
for($i = 0; $i < strlen($str); $i++){
if(ord($str[$i]) > 0xa0){
$tmp[] = substr($str, $i, 2);
$i++;
}else{
$tmp[] = substr($str, $i, 1);
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮生未歇 2017-08-08 22:14:50

你也知道中文是占两位的,因此在substr去截取的时候也截取了2位。$i需要加1,是因为在for循环的时候正好跳过已取中文。

甜柠檬 2017-05-01 07:27:35

每次循环$i只加1,而中文的时候截取了两个字节,故$i需再加1。

想挽留 2017-02-05 18:07:37

// 使用gbk编码保存文件
$str = 'aadfsaf范德萨¥#发大水发23232fdsaf@!aa我';

// 通过输出下编码就能知道怎么回事了
mb_internal_encoding('GBK');

$len = mb_strlen($str);
for($i = 0; $i < $len; $i++) {
$char = mb_substr($str, $i, 1);
if(strlen($char) > 1) {
printf("char %s, Encoding 0x%s, 0x%s", $char, dechex(ord($char[0])), dechex(ord($char[1])));
} else {
printf("char %s, Encoding 0x%s", $char, dechex(ord($char)));
}
echo "n";
}

这是GBK中文编码规则决定的!了解更多GBK编码知识来这里-汉字内码扩展规范.

GBK编码方式:
字符有一字节和双字节编码,00—7F范围内是一位,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。
之后的双字节中,前一字节是双字节的第一位。总体上说第一字节的范围是81—FE(也就是不含80和FF),第二字节的一部分领域在40—7E,其他领域在80—FE。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文