PHP 两字符串比较,值相同 对比却不相等
PHP两字符串比较,值相同对比却不相等到底是哪里的问题我怀疑是编码上的问题而又不太懂是哪里有问题其中一个值$s是mysql读取出来的值,数据库里改字段编码是utf8_ge...
PHP 两字符串比较,值相同 对比却不相等 到底是哪里的问题 我怀疑是编码上的问题
而又不太懂是哪里有问题
其中一个值 $s是mysql读取出来的值,数据库里改字段编码是 utf8_general_ci
链接数据库的时候 有声明mysql_query("set names 'utf-8'");
PHP文本页头也有声明header("Content-Type: text/html; charset=utf-8");
PHP文件保存的编码格式也是utf-8
另外一个数据$d是读取其他网页的信息后截取出来的字符串,该网页编码格式也是utf-8
两个字符串 直接 echo $s 和 echo $d;在页面上输出的结果是完全一样的,可就是if($s==$d)的结果就总是运行 不相等的结果 展开
而又不太懂是哪里有问题
其中一个值 $s是mysql读取出来的值,数据库里改字段编码是 utf8_general_ci
链接数据库的时候 有声明mysql_query("set names 'utf-8'");
PHP文本页头也有声明header("Content-Type: text/html; charset=utf-8");
PHP文件保存的编码格式也是utf-8
另外一个数据$d是读取其他网页的信息后截取出来的字符串,该网页编码格式也是utf-8
两个字符串 直接 echo $s 和 echo $d;在页面上输出的结果是完全一样的,可就是if($s==$d)的结果就总是运行 不相等的结果 展开
4个回答
推荐于2017-10-04 · 知道合伙人数码行家
关注
展开全部
在PHP中,可以用==(双等号)或者 ===(三等号)来比较字符串。两者的区别是双等号不比较类型,三等号会比较类型,它不转换类型;用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。这样的话,如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:
var_dump(0 == 'Test');
var_dump(0 == '');
var_dump(5 > 'T');
var_dump(strcmp(5, 'T'));
运行结果:
bool(true)
bool(true)
bool(true)
int(-1)
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:
var_dump(0 == 'Test');
var_dump(0 == '');
var_dump(5 > 'T');
var_dump(strcmp(5, 'T'));
运行结果:
bool(true)
bool(true)
bool(true)
int(-1)
引用pieryon的回答:
在PHP中,可以用==(双等号)或者 ===(三等号)来比较字符串。两者的区别是双等号不比较类型,三等号会比较类型,它不转换类型;用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。这样的话,如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:
var_dump(0 == 'Test');
var_dump(0 == '');
var_dump(5 > 'T');
var_dump(strcmp(5, 'T'));
运行结果:
bool(true)
bool(true)
bool(true)
int(-1)
在PHP中,可以用==(双等号)或者 ===(三等号)来比较字符串。两者的区别是双等号不比较类型,三等号会比较类型,它不转换类型;用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。这样的话,如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:
var_dump(0 == 'Test');
var_dump(0 == '');
var_dump(5 > 'T');
var_dump(strcmp(5, 'T'));
运行结果:
bool(true)
bool(true)
bool(true)
int(-1)
展开全部
楼上答案有误,误导了很多人。
恰好我今天也遇到,两个值明明一样,但是相比之下,if以后,结果就是false,怎么都不行。
最后,我来到这里,看到楼上的答案,去试了一下,结果返因为null仔细对比之下,除了一个是字符串,一个是数值之外,并没有任何异常。但是返回依然还是false。
最后使用strcmp进行判断,发现两个值相等结果为0.不相等时为其它值。于是引用了下面这个方法。才解决了问题。
if(strcmp($a== $b)==0){
}
$a='412.41';
$b=412.41;
if($a == $b){
true
}else{
false
}
结果为false;虽然很奇怪,但是就是这样。
if(strcmp($a== $b)==0){
true
}else{
false
}
结果为true.
我是这样解决的,哪果有大神看到,知道这个原理到底是怎么回事,欢迎来纠错。
恰好我今天也遇到,两个值明明一样,但是相比之下,if以后,结果就是false,怎么都不行。
最后,我来到这里,看到楼上的答案,去试了一下,结果返因为null仔细对比之下,除了一个是字符串,一个是数值之外,并没有任何异常。但是返回依然还是false。
最后使用strcmp进行判断,发现两个值相等结果为0.不相等时为其它值。于是引用了下面这个方法。才解决了问题。
if(strcmp($a== $b)==0){
}
$a='412.41';
$b=412.41;
if($a == $b){
true
}else{
false
}
结果为false;虽然很奇怪,但是就是这样。
if(strcmp($a== $b)==0){
true
}else{
false
}
结果为true.
我是这样解决的,哪果有大神看到,知道这个原理到底是怎么回事,欢迎来纠错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$d是读取其他网页的信息后截取出来的字符串
这里的截取是什么意思?post过来的还是用了截取函数?
你反应的问题,我这么多年的php经验,没遇到过
看你的描述你也不像是新手,看看是不是哪儿粗心了
这里的截取是什么意思?post过来的还是用了截取函数?
你反应的问题,我这么多年的php经验,没遇到过
看你的描述你也不像是新手,看看是不是哪儿粗心了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有没有其他空字符之类的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询