fgets会忽略某些字符组合吗?

时间:2012-12-14 00:53:10

标签: php

我正在使用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

为什么&lt;'s后面的字符被忽略但是&lt;'s后跟数字?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

print htmlentities($currentLine);

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

答案 2 :(得分:0)

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

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

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