比较 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的主要内容,如果未能解决你的问题,请参考以下文章

比较字符串模式的更好解决方案。?

字符串

Javascript怎么比较两个数组是否相同?

Python比较两组数组中元素是不是完全相同的问题

用JavaScript比较两个数组是否相等

怎么判断两个字符串是不是完全相同?