Php 字符串中的和号导致长度/比较不正确

Php 字符串中的和号导致长度/比较不正确,php,string,urlencode,urldecode,Php,String,Urlencode,Urldecode,我有两个字符串(应该是相同的)。一个从API结果中提取,一个由用户输入。我试着比较他们的失败。当我进行var_dump时,我得到以下结果: var_dump($str1); var_dump($str2); string(21) "Software & Technology" string(25) "Software & Technology" 请注意$str2的长度不正确。有人知道这里发生了什么吗?看起来您有HTML符号和字符&。 在比较字符串之前,应使用: if

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

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

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

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

看起来您有HTML符号和字符
&。
在比较字符串之前,应使用:

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

现场演示:使用html\u实体\u解码将解决符号(和其他字符)问题,使用strcmp将解决其余问题

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

工作完美。非常感谢。你的回答帮了我的忙,但是,从我在这个问题中读到的:,在比较字符串时,你不应该使用
=
。你确定没有任何多字节空白或不可见的字符,比如acsii<32吗?它们可能只是呈现为相同的。您是否在浏览器中查看了源代码?其中一个&可能被渲染为&;第二个字符串很可能实际上是
Software&;技术
,在大多数浏览器中显示与第一个相同的技术。使用
echo htmlspecialchars($str2)
查找。感谢您的回复。它们如何呈现并不重要,重要的是比较失败。我试过用&;替换&;'在$str2中,长度从26更改为25。如何使字符串保持相同?mb_strlen还返回不正确的长度25或26