strcasecmp()在我的PHP脚本中无法正常工作

时间:2011-03-15 13:45:55

标签: php

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

例如,如果我将名称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;  
}

?>

1 个答案:

答案 0 :(得分:5)

您的问题是fgets()在其读取的行中包含行尾字符。这意味着你的{Joe Black'$linedata实际上是“Joe Black \ n”,即它包含换行符。因此,$ lastName最终为“Black \ n”而不是“Black”。

作为快速修复,我会使用stream_get_line()而不是fgets,指定“\ n”作为分隔符。这与fgets()的工作方式非常相似,只是没有将分隔符读入你回来的字符串。

或者保留你的fgets(),然后从你给你的字符串中删除换行符......正如@kavisiegel所提到的,trim()是一种简单的方法(虽然技术上我猜rtrim()会更快!)