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

Chr*_*isJ 1 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;  
}

?>
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 5

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

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

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

  • 或者,您可以使用trim()来清理它. (2认同)