请选择 进入手机版 | 继续访问电脑版
查看: 904|回复: 2

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

[复制链接]

12

主题

87

回帖

214

积分

应用开发者

贡献
0 点
金币
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', 就会判断成不相等, 实际是相等的
我知道答案 回答被采纳将会获得5 金币 已有2人回答
回复

使用道具 举报

12

主题

87

回帖

214

积分

应用开发者

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

使用道具 举报

12

主题

87

回帖

214

积分

应用开发者

贡献
0 点
金币
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
添加有偿服务微信