请参阅下面的代码摘录..
$psusername = substr($list[$count],16);
if ($psusername == $psu_value){
$answer = "YES";
}
else {
$answer = "NO";
}
$psusername
保存值“normann”,该值取自基于文本的文件(url.db)中的URL
$psu_value
还包含从用户计算机上设置的cookie(或浏览器地址栏中的参数 - URL)中检索到的值“normann”。
但是,我确信您可以猜到我的问题,变量$answer
在上面的测试中包含“NO”。
我所知道的所有PHP都是从谷歌搜索中找到的,你们在这里,所以我不是专家,这可能很明显。
也许这是一个小学生错误,但我无法弄清楚我做错了什么。我的假设是数据类型不同。最后,我想比较这两个变量,当它们包含相同的信息时(即normann = normann),它们会得到一个真实的结果。
因此,如果你非常聪明的人可以指出为什么两个变量回应看似相同的信息,但实际上是不同的,这对我来说是一个非常有用的课程,让我的用户非常高兴。
答案 0 :(得分:1)
当你这样做时,他们会回应同样的事情:
echo gettype($psusername) . '\n' . gettype($psu_value);
答案 1 :(得分:0)
由于我无法查看数组$列表中存储的数据(以及索引$ count),因此我无法建议完全解决您的问题。 但我建议你在if语句之前插入这段代码:
var_dump($psusername);
var_dump($psu_value);
并看看为什么这两个变量不相同。 var_dump函数将输出存储在变量和类型(字符串,整数,数组ec ..)中的内容,因此您将找出if语句返回false的原因
答案 2 :(得分:0)
由于您的字符串中看起来有不可打印的字符,因此您可以在比较之前将其删除。这将删除字符集中无法打印的内容:
$psusername = preg_replace("/[[:^print:]]/", "", $psusername);
答案 3 :(得分:0)
0D 0A
是一个新行。第一个是回车(CR)字符,第二个是新行(NL)字符。它们也称为\r
和\n
。
您可以使用trim()
修剪它。
$psusername = trim($psusername);
或者如果它只发生在字符串的末尾,则rtrim()
将完成这项工作:
$psusername = rtrim($psusername);
如果您使用file()
从文件中获取值,则可以将FILE_IGNORE_NEW_LINES
作为第二个参数传递,这将删除新行:
$contents = file('url.db', FILE_IGNORE_NEW_LINES);
答案 4 :(得分:0)
我只想感谢所有回复的人。在查看我的日志文件之后,我意识到HEX格式的输出是回车值导致变量不匹配,我提到的是能够使用以下代码解析(修剪)..
$psusername = preg_replace("/[^[:alnum:]]/u", '', $psusername);
我也知道创建配置文件和用户名的系统允许大写和小写值匹配,因此我采取了预防措施,将该功能构建到我的代码中,作为完整性的附加度量。
我很高兴地说,代码现在功能完善。
再次感谢您的回复和建议。