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,然后就有此时测试实验。应该是编码问题。

然后仅作为记录使用。

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

  1. js中 字符串与Unicode 字符值序列的相互转换

    一. 字符串转Unicode 字符值序列 var str = "abcdef"; var codeArr = []; for(var i=0;i<str.length;i++ ...

  2. 获取字符串对应的MD5值 (AL16UTF16LE)

    CREATE OR REPLACE FUNCTION fn_md5_utf16le (InputString IN VARCHAR2) RETURN VARCHAR2 IS retval ); /** ...

  3. mssql字符串分割后的值,把表中不存在的插入表中

    字符串分割后的值,把表中不存在的插入表中 --供大家参考 使用场景,自行思考…… --创建表tb1 Create table tb1 ( cola int, colb ) ) --插入数据 inser ...

  4. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  5. 通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学

    首发于:Aardio通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=429 ...

  6. 字符串各个字符ASCII值加5

    程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果 程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符. 分析:问题归结为三点: 1 ...

  7. C#中将字符串转换成Md5值的方法

    原文:C#中将字符串转换成Md5值的方法 版权声明:有问题可联系博主QQ:15577969,大家一起相互交流和学习. https://blog.csdn.net/qq15577969/article/ ...

  8. php将一个字符串转变成键值对数组的效率问题

    有这样一种需求,将形式为"TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037"的字符串转换成如下格式的数组: Arr ...

  9. 【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map

    测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三& ...

随机推荐

  1. thinkcmf 相关

    后台登录,暂停关掉登录验证码: /Volumes/macHD2/myCode/wwwroot/app/admin/controller/PublicController.php $captcha = ...

  2. GCC编译器原理(二)------编译原理一:ELF文件(1)

    二.ELF 文件介绍 2.1 可执行文件格式综述 相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者.可执行文件的大小.运行速度.资源占用情况以及可扩展 ...

  3. HTTP 返回状态码

    一.HTTP 超文本传输协议 HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP "客户端"是一个应用程 ...

  4. 获取对象的key值,并保存在数组中

    const itm = { a:1, b:2, c:3 } //Object.keys获取对象的属性,再遍历 Object.keys(itm).forEach(function(key,i,v){ c ...

  5. 嵌入式4412开发板学习知识-Linux系统基础知识

    1. 什么是Linux系统编程 Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务 ...

  6. ubuntu14.04 Samba服务无法访问 网络名不再可用的问题

    参考链接 : https://blog.csdn.net/liuyixjtu/article/details/54575514

  7. Spring如何支持可扩展

    Spring是一款优秀的开发框架,包括了非常多的基础组件 那么它是如何做到灵活可扩展呢? 1 .框架初始化 2.Bean初始化 ref https://mp.weixin.qq.com/s/QuSls ...

  8. ipconfig命令查ip的时候给别人看有危险吗

    知识源:Unit 4: Networking 1 4.1 Networking 1 The Routing of a Packet  网址:https://www.baidu.com/link?url ...

  9. [Kubernetes]关于K8s,你应该知道的一些东西

    Kubernetes概述 Kubernetes(也常称K8s,用8代替8个字符"ubernete"而成的缩写),是一个开源的,用于管理云平台中多个主机上的容器化应用. 它的一个核心 ...

  10. Charles for MAC配置与使用

    Charles已成为网络接口数据抓取的利器之一,无论是作为开发人员还是测试人员,在实际开发及调试中都需要通过网络数据接口的抓取来进行数据正确性的验证及异常的排查.Charles抓取网络接口数据的原理就 ...