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,然后就有此时测试实验。应该是编码问题。
然后仅作为记录使用。
PHP字符串比较,看起来值完全一样,但是就是不相等的解决方案(‌)的更多相关文章
- js中 字符串与Unicode 字符值序列的相互转换
一. 字符串转Unicode 字符值序列 var str = "abcdef"; var codeArr = []; for(var i=0;i<str.length;i++ ...
- 获取字符串对应的MD5值 (AL16UTF16LE)
CREATE OR REPLACE FUNCTION fn_md5_utf16le (InputString IN VARCHAR2) RETURN VARCHAR2 IS retval ); /** ...
- mssql字符串分割后的值,把表中不存在的插入表中
字符串分割后的值,把表中不存在的插入表中 --供大家参考 使用场景,自行思考…… --创建表tb1 Create table tb1 ( cola int, colb ) ) --插入数据 inser ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- 通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学
首发于:Aardio通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=429 ...
- 字符串各个字符ASCII值加5
程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果 程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符. 分析:问题归结为三点: 1 ...
- C#中将字符串转换成Md5值的方法
原文:C#中将字符串转换成Md5值的方法 版权声明:有问题可联系博主QQ:15577969,大家一起相互交流和学习. https://blog.csdn.net/qq15577969/article/ ...
- php将一个字符串转变成键值对数组的效率问题
有这样一种需求,将形式为"TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037"的字符串转换成如下格式的数组: Arr ...
- 【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map
测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三& ...
随机推荐
- [Android] Android RxBus 用法学习总结
事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想. rxbus和eventbus相比较: RxJava 主要做异步.网络的数据处理,强大之处就是对 ...
- Python获取下载速度并显示进度条
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys import time from urllib import request ''' urll ...
- python位运算
什么是位运算 位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <<(左移), >>(右移) &(与) &a ...
- Excel列名序号互转
public static int ToIndex(string columnName) { if (!Regex.IsMatch(columnName.ToUpper(), @"[A-Z] ...
- javascript文件加载模式与加载方法
加载方式 形象图像化方法,见 http://www.growingwiththeweb.com/2014/02/async-vs-defer-attributes.html 1. script标签, ...
- mysql比较运算符和函数
mysql> SELECT 15 BETWEEN 1 AND 22;+---------------------+| 15 BETWEEN 1 AND 22 |+---------------- ...
- alexnet- tensorflow
alexnet 在 imagenet上夺冠是卷积神经网络如今这么火热的起点. 虽然卷积神经网络很早就被提出来,但是由于计算能力和各方面原因,没有得到关注. alexnet 为什么能取得这么好的成绩,它 ...
- 第27月第17天 objc_msgSendSuper
1.objc_msgSendSuper super 的含义,消息转发会调用 objc_msgSendSuper, 就是 去父类的方法列表中找到 initWithFrame:这个方法,然后调用,调用的主 ...
- 利用PyMySQL库连接数据库
安装与准备 这是python3的库,所以windows下安装不会像python2那样各种奇葩VC错误.是比较方便的傻瓜安装. Windows平台下: py -3 -m pip install PyMy ...
- MySql数据库学习笔记(2)
DELETE 语法:delete from 表名 [where condition] delete from grade; TRUNCATE 用于完全清空表数据,但表结构.索引.约束不变: 语法: t ...