我有两个字符串,一个是由PHP生成的,存储在128个字符的数据库中。生成的字符串通过电子邮件发送给用户,他们必须输入字符串。
现在由于某种原因,来自用户(通过我测试)的那个,通过var_dump
长度为132个字符。当我echo
时,它们完全相同。 var_dump
也是如此。字符数除外。这些额外的4个(不可见)字符来自哪里?
答案 0 :(得分:13)
试
var_dump(bin2hex($str1));
var_dump(bin2hex($str2));
或
var_dump(htmlspecialchars($str1));
var_dump(htmlspecialchars($str2));
检查有什么不同,一旦找到,粘贴在这里不同的位,这样我们就可以找出差异的来源。
修改强>
这是&
编码为&
的通知&
< - > &
是4个不同的字符。我的想法是你发送纯文本电子邮件,但是对字符串进行授权,因此所有&
都变为&
。
答案 1 :(得分:1)
可能一个是UTF-8,一个是iso-8859-1或其他一些不同的编码。
在其中一个上尝试utf_decode()并查看它是否匹配。
答案 2 :(得分:0)
这个可能是一个偷偷摸摸的编码问题,其中一个字符串有一个组合字符,如å
存储为一个unicode字符,另一个字符串将它存储为两个单独的字符。 / p>
答案 3 :(得分:0)
使用以下内容添加@aularon答案:
的var_dump(用htmlspecialchars($ STR1));
的var_dump(用htmlspecialchars($ STR2));
暴露出它确实是&
而不是另一个字符串。
要解决这个问题,我使用htmlspecialchars_decode($str)
就可以了。