2012-12-14 23 views
0

我正在使用fgets逐行读取文件。某些字符串组合被忽略。我猜这是作为转义角色被选中的,但我不明白。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 

为什么在<的后跟字符忽略但不是<的数字后面?

+0

您是否在浏览器上打印此内容? –

回答

0

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

为了解决您的问题,使用PHP的ヶ辆()函数是这样的:

print htmlentities($currentLine); 

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

1

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

+0

通过直接写入浏览器进行测试。我还会如何测试? < - 严肃的问题,我是一个noob – WildBill

+0

请参阅页面源码在浏览器 – MAXIM

+0

,因为你没有使用htmlentities()函数,而你的浏览器认为你已经制作了一个新的HTML标签或其他东西。事实上,它不会处理由W3C规则 – MAXIM

0

忽略直接从$_GET阵列打开文件了片刻的问题群,你需要打开括号到HTML实体。要正确显示换行符您可以添加<br>到每一行的末尾,或者使用<pre>\n像这样:

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

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

+0

开始的数字。我知道我正在避开编码习惯。这只是一个内部原型。 – WildBill