zoukankan      html  css  js  c++  java
  • 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,然后就有此时测试实验。应该是编码问题。 

    然后仅作为记录使用。

  • 相关阅读:
    JavaScript DOM 编程艺术(第2版)读书笔记(3)
    JavaScript DOM 编程艺术(第2版)读书笔记(1)
    css杂记
    2020年11月15日
    2020年11月14日
    2020年11月13日
    2020年11月12日
    《代码大全》阅读笔记04
    2020年11月11日
    2020年11月10日
  • 原文地址:https://www.cnblogs.com/fanbi/p/9309893.html
Copyright © 2011-2022 走看看