0

私はfgetsを使用してファイルを1行ずつ読み取ります。特定の文字列の組み合わせは無視されます。これはエスケープ文字として取り上げられていると思いますが、わかりません。

私のコードは次のとおりです。

$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

ブラウザは、<と>の間のテキストをHTMLタグ(少なくとも数字で始まらないもの)として解釈します。あなたのページのソースを見れば、あなたは完全なテキストを見つけると確信しています。

この問題を解決するには、次のようなPHPのhtmlentities()関数を使用します。

print htmlentities($currentLine);

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

于 2012-12-14T00:56:59.627 に答える
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 に答える