比较 2 个完全相同的字符串返回 false
Posted
技术标签:
【中文标题】比较 2 个完全相同的字符串返回 false【英文标题】:Comparing 2 exact same strings returns false 【发布时间】:2011-12-25 05:58:25 【问题描述】:我有一个通过 html 表单发布的变量:
$_POST['ref']
还有一个从数据库中的表中提取的变量:
$row['ref']
我有一个基本的比较脚本来检查它们是否相同:
$ref = $_POST['ref'];
$result = mysql_query("SELECT * FROM logbook.job");
if (!$result)
die("Query to show fields from table failed");
$row = mysql_fetch_array($result);
$refdb = $row['ref'];
$refform = $_POST['ref'];
echo $_POST['ref'] ."<br>". $row['ref'] . "<br><br>";
if ($refdb == $refform)
echo "Yes they are<br><br>";
else
echo "No they are not<br><br>";
if (is_string($_POST['ref']))
echo "Yes";
else
echo "No";
echo "<br>";
if (is_string($row['ref']))
echo "Yes";
else
echo "No";
哪些输出:
G2mtxW
G2mtxW
No they are not
Yes
Yes
我把它们都呼出来了。比我问他们是否相同。然后我检查每个是否是一个字符串。
他们怎么不一样?我怎样才能让他们匹配
任何帮助将不胜感激
【问题讨论】:
变量中有空格吗? 只是为了验证,你能在每个回显的字符串后面加上*
吗?
尝试var_dump($row['ref'],$_POST['ref']);
并以这种方式比较它们,看看是否有任何问题。
尝试使用strlen()
和trim()
进行检查
您好,我发现表单中的所有变量都添加了一个空格。谢谢我用 trim() 清除它们
【参考方案1】:
尝试对字符串使用二进制安全比较:
result = strcmp($str1, $str2);
如果结果为 0,则两者相同。否则,它们不是。
【讨论】:
这就是解决方案!谢谢!【参考方案2】:您的一个字符串(可能是来自数据库的那个)可能以空值结尾。我已经测试了以下
$foo = "abc\0";
$bar = "abc";
echo "$foo\n$bar\n";
if($foo == $bar)
echo "Equal.";
else
echo "Not equal."
输出是
abc
abc
Not equal.
【讨论】:
谢谢!它帮助我意识到我的字符串包含一个空字符。我使用strip_tags
将其删除,如评论中所示:***.com/a/642475/587594【参考方案3】:
尝试var_dump
-ing 这两个值,检查它们的长度并使用视图源检查它们。它们在某种程度上是不同的。
【讨论】:
【参考方案4】:
echo $status_message;
echo "Accepted";
if(strcmp($status_message,"Accepted")==0)
echo "equal";
else
echo "not equal";
?>
$row['status'] 是表中的一个字段
【讨论】:
以上是关于比较 2 个完全相同的字符串返回 false的主要内容,如果未能解决你的问题,请参考以下文章