PHP版本会导致相同代码的不同跳行行为
当在PHP5.3.8中从命令行调用上述代码时,它将打印输入文件中的行,并跳过任何空行。但是,在PHP5.2.6中,它不会跳过空行 是否有任何方法可以更改代码,使其跳过lder版本中的空行PHP版本会导致相同代码的不同跳行行为,php,Php,当在PHP5.3.8中从命令行调用上述代码时,它将打印输入文件中的行,并跳过任何空行。但是,在PHP5.2.6中,它不会跳过空行 是否有任何方法可以更改代码,使其跳过lder版本中的空行 while($c=fgets(STDIN)){ if($c===PHP_EOL){ continue; } else { echo $c; } } 另外,我认为php版本并不重要。配置似乎有问题。如果不需要尾随空格,可以使用: $c = str_
while($c=fgets(STDIN)){
if($c===PHP_EOL){
continue;
}
else {
echo $c;
}
}
另外,我认为php版本并不重要。配置似乎有问题。如果不需要尾随空格,可以使用:
$c = str_replace("\r\n", "", $c);
如果您这样做,您可能应该检查字符串长度或使用以下选项:
$c = rtrim( $c, "\n\r");
if( $c == ''){
continue;
}
这种差异可能是由php.ini更改引起的,而不是版本。检查php配置文件中的
auto\u detect\u line\u endings
键,或者如果您有访问权限,请尝试
if( ($c{0} == "\n") || ($c{0} == "\r")){
continue;
}
fgets
使用的是auto\u detect\u line\u endings
PHP\u EOL
始终根据操作系统获取正确的行尾字符,但是如果不将auto\u detect\u line\u endings
设置为true,则可能会失败。如果将条件更改为
<?php
ini_set("auto_detect_line_endings", true);
?>
这应该适用于任何平台
请参见是否确定
PHP_EOL
在两种环境中都是相同的,并且它与所讨论的文件的EOL
字符匹配?我认为PHP_EOL是一个预定义的常量,因此应该适用于任何系统,请参见此处:它是预定义的,但它映射到平台EOL。因此,如果您在不同的平台之间切换,并且您正在读取的文件是在不同的平台上创建的,那么EOL
可能不匹配。哦,我明白了,这没有多大帮助。。感谢推荐在第一个示例中使用if($c='')
而不是if(empty($c))
;“0”可能是有效的输入。@Phoenix Withfgets
string包含\n
resp\r\n
,因此当字符串以\n
或\r
开头时,它只包含换行符。这是正确的,但假设用户输入序列0\n
。在通过rtrim()
运行后,$c
现在包含字符串“0”,这将导致empty($c)
返回true
,这可能不会导致此应用程序的正确行为。谢谢,我认为配置也可能有问题,还有一个php警告,我会问我的主机提供商。好的,我刚刚试过这个。在php.ini中,它被设置为“Off”。我改为“开”,但它仍然不起作用。谢谢!这很有效。你能给我发个文档链接吗?我想更好地理解它哦,我现在明白了,它是ascii,很棒,tnx这个字符串在不同的服务器上提供不同的输出…帮助<代码>$lat=((ord($str[7])@Reddox您能就这个问题单独问一个问题吗?OP的问题和您的问题不一样
if(ord($c[0])==0x0a || ord($c[0])==0x0d)