返回列表 发帖
查看: 1202|回复: 2

[求助] function dintval函数存在BUG:

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
发表于 2022-5-27 09:23:49 | 显示全部楼层 |阅读模式
function dintval函数存在BUG:
就是这个使用量非常大的函数: https://zhidao.baidu.com/question/554863766.html

后面那里0xffffffff里面判断0到9个数是否一致就返回原始参数, 如果传入的参数是前面带0的:

比如: dintval('04500000000')
返回的也会是字符串'04500000000', 在自身的mysql里面查询是没有问题的, 但是如果是要传输给别人ajax或者输出给html时,
然后后续又有判断 '4500000000' == '04500000000', 就会判断成不相等, 实际是相等的
我知道答案 回答被采纳将会获得1 贡献 已有2人回答
回复

使用道具 举报

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
 楼主| 发表于 2022-5-27 09:30:40 | 显示全部楼层
我知道后面为啥要用strspn去判断数字, 是因为非64位系统或PHP小于7.1时, php只能处理小于42亿的数字,
因为如果系统整体不支持64位的话, 只修复intval这一个函数也是没有意义的, time()等一大堆基础函数里面的数字如果大于21亿的话执行后同样也会乱码不正确的
回复 支持 反对

使用道具 举报

12

主题

87

回帖

220

积分

应用开发者

贡献
1 点
金币
71 个
 楼主| 发表于 2022-5-27 09:35:59 | 显示全部楼层
网上教程说要支持大于21亿的int数字只要64位系统和安装64位的PHP说法也是错的,
就算系统和PHP都是64的, PHP版本如果小于7的话也是不行的, 只有php大于7以上才是完美支持了大于21亿的int,
所以在本身就不支持大于21亿的前提下只去修复dintval这一个也是没有意义的, 反而还容易导致出现1楼的BUG
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2024-4-16 22:53 , Processed in 0.041880 second(s), 6 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2024 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表