strcasecmp()在我的php脚本中工作不正常

strcasecmp()在我的php脚本中工作不正常,php,Php,在下面的代码片段中,我使用了strcasecmp函数。该函数适用于名匹配,但不适用于姓匹配 例如,如果名称文件中的名称为Joe Black,名称为submit空格,则$xxx和$yyy的值分别为-3和-6。如果提交名称,我得到$xxx=0和$yyy=-1 有人能告诉我我错过了什么或做错了什么吗 谢谢 克里斯 您的问题是fgets在读取的行中包含行尾字符。这意味着Joe Black的$linedata实际上是Joe Black,即它包含一个换行符。因此,$lastName以黑色结束\n而不是黑色

在下面的代码片段中,我使用了strcasecmp函数。该函数适用于名匹配,但不适用于姓匹配

例如,如果名称文件中的名称为Joe Black,名称为submit空格,则$xxx和$yyy的值分别为-3和-6。如果提交名称,我得到$xxx=0和$yyy=-1

有人能告诉我我错过了什么或做错了什么吗

谢谢

克里斯

您的问题是fgets在读取的行中包含行尾字符。这意味着Joe Black的$linedata实际上是Joe Black,即它包含一个换行符。因此,$lastName以黑色结束\n而不是黑色

作为一个快速修复方法,我将使用而不是fgets,指定\n作为分隔符。这与fgets的工作原理非常相似,只是它不会将分隔符读入返回的字符串中

或者保留你的fgets,把新行从它给你的字符串中去掉。。。正如@kavisiegel提到的,这是一种简单的方法,尽管从技术上来说,我想会更快

您的问题是,fgets在读取的行中包含行尾字符。这意味着Joe Black的$linedata实际上是Joe Black,即它包含一个换行符。因此,$lastName以黑色结束\n而不是黑色

作为一个快速修复方法,我将使用而不是fgets,指定\n作为分隔符。这与fgets的工作原理非常相似,只是它不会将分隔符读入返回的字符串中


或者保留你的fgets,把新行从它给你的字符串中去掉。。。正如@kavisiegel提到的,这是一种简单的方法,尽管从技术上来说,我想会更快

执行var_dump$lname、$lastName并发布结果执行var_dump$lname、$lastName并发布结果可选,您可以使用trim进行清理。感谢您的解释和建议。。。。我用我已经有的修剪。或者,你可以用修剪来清洁它。谢谢你的解释和建议。。。。我用我已经拥有的东西去修剪。
<?php 
$fname = $_POST["fname"]; 
$lname = $_POST["lname"];

print "First Name: " .$fname; 
print "< br/>"; 
print "Last Name: " . $lname;

$namesFile = "namesFile.txt";

$numLines = count(file($namesFile)); 
print "< br/>"; 
print "Lines: " . $numLines;

$fh = fopen ($psswrdFile, "r");

for ($i=1; $i <= $numLines; $i++) 
{ 
$lineData = fgets($fh); 
print "< br/>"; 
print $lineData;

list($firstName, $lastName) = explode(" ", $lineData);

print "First Name: " .$firstName;  

print "Last Name: " . $lastName;  

$xxx = strcasecmp($fname,$firstName);  

print "name " . $xxx;  

$yyy = strcasecmp($lname, $lastName);  

print "password" . $yyy;  
}

?>