2012-12-14 29 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