PHP-php截取中文字符串
$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你也知道中文是占两位的,因此在substr去截取的时候也截取了2位。$i需要加1,是因为在for循环的时候正好跳过已取中文。
每次循环$i只加1,而中文的时候截取了两个字节,故$i需再加1。
// 使用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编码知识来这里-汉字内码扩展规范.