TaR*_*RDy 33 php newline text-editor
我有一个我写的php函数,它将获取一个文本文件并将每一行列为表中的自己的行.
问题是经典"在我的机器上工作正常",但当然我要求别人生成我正在寻找的.txt文件时,它会继续读取整个文件中的1行.当我在我的文本编辑器中打开它时,它看起来就像我期望它在每一行上有一个新名称,但它是换行符或其他东西.
到目前为止,我已经得出结论,它可能与他们在Mac系统上使用的任何文本编辑器有关.
这有意义吗?是否有任何简单的方法来检测文本编辑器识别为新行并将其替换为php将识别的标准字符?
更新:添加以下行解决了该问题.
ini_set('auto_detect_line_endings',true);
Run Code Online (Sandbox Code Playgroud)
功能:
function displayTXTList($fileName) {
if(file_exists($fileName)) {
$file = fopen($fileName,'r');
while(!feof($file)) {
$name = fgets($file);
echo('<tr><td align="center">'.$name.'</td></tr>');
}
fclose($file);
} else {
echo('<tr><td align="center">placeholder</td></tr>');
}
}
Run Code Online (Sandbox Code Playgroud)
jmu*_*llo 11
怎么了file()?
foreach (file($fileName) as $name) {
echo('<tr><td align="center">'.$name.'</td></tr>');
}
Run Code Online (Sandbox Code Playgroud)
从fgets的手册页:
注意:如果在读取Macintosh计算机上或由Macintosh计算机创建的文件时PHP未正确识别行结尾,则启用auto_detect_line_endings运行时配置选项可能有助于解决问题.
还有,你试过文件功能吗?它返回一个数组; 数组中的每个元素对应于文件中的一行.
编辑:如果您无法访问php.ini,您使用的是哪个Web服务器?在Apache中,您可以使用.htaccess文件更改PHP设置.还有ini_set函数允许在运行时更改设置.
这是换行问题的经典案例.
ASCII定义了几个不同的"换行符"字符.我们关心的两个特定的是ASCII 10(换行,LF)和13(回车,CR).
所有基于Unix的系统,包括OS X,Linux等,都将使用LF作为换行符.Mac OS Classic使用CR只是为了与众不同,Windows使用CR LF(这是正确的,新行的两个字符 - 看看为什么没有人喜欢Windows?开玩笑)作为换行符.
因此,来自Mac上某人的文本文件(假设它是一个现代操作系统)都会将LF作为其行尾.如果你试图在Windows上阅读它们,并且Windows期望CR LF,它将无法找到它.现在,已经提到 PHP有能力为你排序这个混乱,但如果你愿意,这里有一个记忆占用的解决方案:
$file = file_get_contents("filename");
$array = split("/\012\015?/", $file); # won't work for Mac Classic
Run Code Online (Sandbox Code Playgroud)
当然,你可以做同样的事情file()(正如已经提到的那样).