关于ord函数

Murjor的PHP之路 2015-05-10 01:52:25
关于如何做这个题的算法我是清楚的,但是就有关于ord函数的一些原理问题不能理解,请大神帮忙解释一下,通俗易懂最好,本人新手。
<?php
function chinesesubstr($str,$start,$len)
{
$strlen=$start+$len; //判断截取的长度
for($i=start;$i<$strlen.lenth;$i++)
{
if (ord(substr($str, $i,1))>0xa0)
{
$word.=substr($str,$i,2);
$i++;
}
else
$word.=substr($str,$i,i);
}
return $word;
}
?>


我们可以看到,这段代码再第一个判断语句
if (ord(substr($str, $i,1))>0xa0)

中,substr($str,$i,1) substr函数截取的长度只有一个字节。小弟在网上了解了一下,汉字在GB2312的标准里面是2个字节长度,所以第一个问题: 因为ord()函数只是判断一个字符串第一个字符的ASCII码,意思是只判断这个汉字的第一个字节的ASCII吗?

然后第二个问题:【先看一下代码】
         if (ord(substr($str, $i,1))>0xa0)
{
$word.=substr($str,$i,2);
$i++;
}

这边符合判断条件之后,这边的substr()函数截取的长度变为2 但是$i只有加1,这是我和不能理解的。因为汉字有两个字节长度,所以这边的$i不应该是加2吗?

求大神帮忙解释一下 小弟感激不尽,新手新学,可能对一些概念还都不是很理解。求通俗易懂解释~
...全文
178 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-05-10
  • 打赏
  • 举报
回复
ord 取得字符的内码 GB2312标准中,1个汉字用2个字节表示,且每个字节的内码均大于 0xa0 但在 GBK 标准中,只限定第一个字节的内码大于 0x80。这一点需要注意 对于 GB2312 由于汉字固定为2个字节,所以只需检查第一个字节就可以了 对于 $i只有加1 是这样的: 因为你的操作是在 for($i=start;$i<$strlen.lenth;$i++) 这样的循环中进行的,而循环本身会将 $i 加 1 所以在判定是汉字时,只需 $i++。加上循环本身的 $i++,不正好是加 2 了吗?

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧