2011-03-15 46 views
1

在下面的代码片段中,我使用了strcasecmp()函数。该函数适用于名字匹配,但不适用于姓氏。strcasecmp()在我的php脚本中无法正常工作

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

有人可以告诉我什么我失踪或做错了吗?

感谢

克里斯

<?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; 
} 

?> 
+0

做var_dump($ lname,$ lastName)并发布结果 –

回答

5

您的问题是fgets()包括结束行的字符在它读取线。这意味着您的“Joe Black”的$linedata实际上是“Joe Black \ n”,即它包含换行符。因此,您的$ lastName最终为“黑色\ n”而非“黑色”。

作为一个快速修复,我会使用stream_get_line()而不是fgets,指定“\ n”作为分隔符。这将非常类似于fgets(),除了它不会将分隔符读入您返回的字符串中。

或保留与fgets()和刚剥离出换行的字符串它给你......至于@kavisiegel提到,trim()是这样做的一个简单的方法(虽然技术上我猜rtrim()会更快!)

+2

或者,您可以使用trim()来清除它。 –

+0

感谢您的解释和建议....我用trim()和我已经有过的。 – ChrisJ