列表项继续在PHP中的下一行

时间:2012-09-13 20:01:02

标签: php newline html-form

我正在使用表单提交要保存到配置文本文件的项目列表,但这些列表项应全部位于文本文件的同一行。然而,每次PHP拆分并将列表项放入文件中时,它会自动在</li>标记之前添加新行。为什么?我该如何防止这种情况。

CODE:

$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

如果我将$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>之前都有换行符?

在那里的某个地方,它正在添加新线......

谢谢!

大卫

3 个答案:

答案 0 :(得分:4)

换行符可能是棘手的窗口或linux \n和/或\r所以我添加了一个修剪以删除爆炸后的任何额外的东西,似乎工作。我个人会使用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>

答案 1 :(得分:0)

我只需要添加以下行:

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

无论出于何种原因,它都会添加一个返回字符。我不知道为什么,但感谢你的帮助。

答案 2 :(得分:0)

在您使用PHP_EOL的任何系统中,将远离相应的End-Of-Line-char序列。

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"]);

是接下来的方式