0

フォームを使用して構成テキスト ファイルに保存するアイテムのリストを送信していますが、これらのリスト アイテムはすべてテキスト ファイルの同じ行にある必要があります。ただし、PHP が分割してリスト項目をファイルに入れるたびに、</li>タグの前に新しい行が自動的に追加されます。なんで?どうすればこれを防ぐことができますか。

コード:

$pro = explode("\n",$_POST["pro"]);
$proo = "<ul>";

for($index=0; $index<count($pro);$index++)
{
    $proo .= "<li>";
    $proo .= $pro[$index];
    $proo .= "</li>";
}

$proo .= "</ul>";

$proo = str_replace("\n","",$proo);

編集 1

Web ページにエコー$prooすると、次のようになります。

<ul><li>List Item 1
</li><li>List Item 2
</li><li>List Item 3
</li><li>List Item 4
</li><li>List Item 5</li></ul>

それぞれの前に改行があるのはなぜ</li>ですか?

そこのどこかに、新しい行が追加されています...

ありがとう!

デビッド

4

2 に答える 2

4

改行は扱いにくいウィンドウまたはLinux\nである可能性がある\rため、爆発後に余分なものを削除するためにトリムを追加しましたが、うまくいくようです。個人的には for() よりも foreach() の父を使用しますが、それは私だけです

$_POST["pro"]="1
2
3
4";

$pro = explode("\n",$_POST["pro"]);

$proo = "<ul>";
for($index=0; $index<count($pro);$index++)
{
    $proo .= "<li>".trim($pro[$index])."</li>";
}

$proo .= "</ul>";

echo $proo;

出力:

<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul>
于 2012-09-13T20:14:36.683 に答える
0

PHP_EOLを使用しているどのシステムでも、適切な End-Of-Line-char-sequence と等しくなります。

explode(PHP_EOL,$_POST["pro"]);

上記のコードは常に機能します。

改行 (PHP_EOL 値) は次のとおりです。
Windows: \r\n
*nix: \n
古い Apple Macintosh (新しいものは unix ベース): \r

PHP_EOL doc

編集: Dagon
が指摘したように、ブラウザはデフォルトで Windows の改行を使用しています。

explode("\r\n",$_POST["pro"]);

それから行く方法です

于 2012-09-13T20:24:15.237 に答える