我正在使用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后跟数字?
答案 0 :(得分:1)
您是直接在网页上还是在来源中查看? 感觉浏览器隐藏它们:))
答案 1 :(得分:0)
浏览器解释&lt;之间的文本。和&gt;作为HTML标记(至少是不以数字开头的标记)。如果您查看页面的来源,我相信您会找到完整的文本。
要解决您的问题,请使用PHP的htmlentities()函数,如下所示:
print htmlentities($currentLine);
答案 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";
}
现在,打开这样的文件。这是一个非常非常糟糕的主意。如果您只使用自己使用的代码,那么好吧,但即便如此,它可能会导致您没有想到的问题。最好的办法是永远不要使用客户提供的数据来打开文件,但是如果你必须确保路径是干净的并且不包含恶意内容(例如前面的斜杠或点等)。