0

我正在使用 fgets 逐行读取文件。某些字符串组合被忽略。我猜这是作为转义字符被捡起来的,但我不明白。

我的代码是:

$myFile = $_GET['filename'];

$file = fopen($myFile, "r");

while (!feof($file))
{
   $currentLine = fgets($file);
   print $currentLine;
}

我的文件是:

15:37:33 Me <Washington  USA>  outdoor
15:39:34 Me <Washington USA>  outdoor
15:41:36 Me <208 Terrace Ct SE USA>  outdoor
15:43:37 Me <305 Glyndon St SE USA>  indoor

然而输出只是这样:

15:37:33 me outdoor 15:39:34 me outdoor 15:41:36 me <208 Terrace Ct SE USA> outdoor 15:43:37 me <305 Glyndon St SE USA> indoor

为什么忽略<后跟字符而不是<后跟数字?

4

3 回答 3

1

您是直接在页面上查看还是在源中查看?感觉浏览器隐藏了它们:))

于 2012-12-14T00:56:26.803 回答
0

暂时忽略直接从$_GET数组打开文件的问题,您需要将括号转换为 HTML 实体。要正确显示换行符,您可以添加<br>到每行的末尾,或者使用<pre>\n像这样:

$myFile = $_GET['filename'];
$file = fopen($myFile, "rb");
echo '<pre>';
while ($line = fgets($file)) {
    echo rtrim(htmlentities($line)), "\n";
}

现在,像这样打开文件。这是一个非常非常糟糕的主意。如果您只是将代码用于自己的用途,那没关系,但即便如此,它也可能会导致您没有考虑过的问题。最好的办法是永远不要使用客户端提供的数据来打开文件,但如果你必须确保路径是干净的并且不包含恶意内容(例如前面的斜杠或点等)。

于 2012-12-14T01:12:03.353 回答
0

浏览器将 < 和 > 之间的文本解释为 HTML 标记(至少是那些不以数字开头的标记)。如果您查看页面的来源,我相信您会找到完整的文本。

要解决您的问题,请使用 PHP 的 htmlentities() 函数,如下所示:

print htmlentities($currentLine);

http://ch2.php.net/manual/en/function.htmlentities.php

于 2012-12-14T00:56:59.627 回答