【问题标题】:Ampersand in String causing incorrect length/comparison字符串中的与号导致不正确的长度/比较
【发布时间】:2013-04-01 06:32:27
【问题描述】:

我有两个字符串(应该是相同的)。一个从 API 结果中提取,一个由用户输入。我试图比较它们并失败了。当我 var_dump 时,我得到以下信息:

var_dump($str1);
var_dump($str2);

string(21) "Software & Technology" 
string(25) "Software & Technology"

注意 $str2 的长度不正确。有人知道这里发生了什么吗?

【问题讨论】:

  • 你确定没有像acsii
  • 它们可能只是呈现相同的。您是否在浏览器中查看过源代码? & 之一可能呈现为 &
  • 很可能第二个字符串实际上是Software & Technology,它在大多数浏览器中的显示与第一个字符串相同。使用echo htmlspecialchars($str2) 找出答案。
  • 感谢您的回复。它们如何渲染并不重要,重要的是比较失败。我试过用 '&' 替换 '&'在 $str2 中,长度从 26 变为 25。我怎样才能让字符串相同?
  • mb_strlen 也返回不正确的长度 25 或 26

标签: php string urlencode urldecode


【解决方案1】:

使用 html_entity_decode 将解决 & 符号(和其他字符)问题,而使用 strcmp 将处理其余的问题。

if (strcmp(html_entity_decode($str1), html_entity_decode($str2)) == 0) {
    // ..
}

【讨论】:

    【解决方案2】:

    您在其中一个字符串中似乎有 HTML & 符号 &。 您应该在比较字符串之前使用html_entity_decode

    if (html_entity_decode($str1) == html_entity_decode($str2)) {
        // ...
    }
    

    现场演示:http://ideone.com/pkWEJC

    【讨论】:

    • 完美运行。非常感谢。
    • 您的回答对我有所帮助,但从我在这个问题中读到的内容:String comparison using == vs. strcmp,比较字符串时不应该使用==
    猜你喜欢
    • 2018-05-11
    • 2015-04-30
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多