PHP字符串比较,看起来值完全一样,但是就是不相等的解决方案(‌)

1 前言

字符串比较,看起来完全一样,然后用strcmp比较,永远不相等,用var_dump查看才知道,其中一个字符多了‌看不见的特殊符号,而我长度是3。

2 样例

当你选中它,显示出来的就是人眼所见即输出的网页的,有点儿意思~

3 分析

还未发现根本原因,暂无分析~,原因在于windows复制黏贴是会在字符串最前面加入3字节的"‌"导致长度+3了,当然无法匹配通过。

做了实验,用phpstrom IDE来测试,测试数据如下:

‌‌//第一组数据,异常
‌‌$str='47ec2dd791e31e2ef2076caf64ed9b3d'
‌47ec2dd791e31e2ef2076caf64ed9b3d

‌‌$str2
‌‌47ec2dd791e31e2ef2076caf64ed9b3d

‌‌strcmp($str,$str2);
‌-1

‌‌$str3 = $str;
‌47ec2dd791e31e2ef2076caf64ed9b3d

‌‌strcmp($str,$str3);
‌0

‌‌strcmp($str2,$str3);
‌1

‌‌strlen($str)
‌32
‌‌
‌‌strlen($str2)
‌35

‌‌strlen($str3)
‌32

把上面这个code,用html查看源码,如下。发现‌很多很多...

经过测试发现规律是,如果你复制黏贴$s后面的字符串,则长度一致,如果是复制的是输出的结果,则长度会+3,正如下图的红色和绿色的路线可知。  

4 解决方案

$len_sign = strlen($sign);
if($len_sign == 35){
	$sign = substr($sign,3,35);	
}

if(strcmp($sign,$sign_server) != 0 ){
	echo "invalid request errcode=4"; 
	die();
}  

5 小结

sign是32位复制或者一个字一个字敲进去的,结果到php后端会出现长度是35,然后就有此时测试实验。应该是编码问题。 

然后仅作为记录使用。

转载于:https://www.cnblogs.com/fanbi/p/9309893.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值