【问题标题】:List items keep going to the next line in PHP列表项继续在 PHP 中的下一行
【发布时间】:2012-09-13 20:01:01
【问题描述】:

我正在使用表单提交要保存到配置文本文件的项目列表,但这些列表项都应位于文本文件的同一行。但是,每次 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

如果我在网页中回显$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>

为什么每个&lt;/li&gt;前都有换行符?

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

谢谢!

大卫

【问题讨论】:

  • 你在查看网页源码的时候看到换行了吗?
  • 不,它输出到一个文本文件,该文件在每个 &lt;/li&gt; 标记之前包含新行。它弄乱了主页上的 javascript,所以我需要从这块中删除换行符。
  • $pro = explode("\n",$_POST["pro"]); 之后添加 print_r($pro); 并向我们展示输出
  • Array ( [0] =&gt; List Item 1 [1] =&gt; List Item 2 [2] =&gt; List Item 3 [3] =&gt; List Item 4 [4] =&gt; List Item 5 )

标签: php newline forms


【解决方案1】:

换行符可能是棘手的 windows 或 linux \n 和或 \r 所以我添加了一个修剪以删除爆炸后的任何额外内容,似乎有效。我个人会使用 foreach() 父亲而不是 for() 但这只是我

$_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>

【讨论】:

    【解决方案2】:

    在您使用的任何系统中,PHP_EOL 将等于相应的 End-Of-Line-char-sequence。

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

    上面的代码将始终有效。

    换行符(PHP_EOL 值)是:
    窗口:\r\n
    *尼克斯:\n
    旧的 Apple Macintosh(新的基于 unix):\r

    PHP_EOL doc

    编辑:
    正如 Dagon 所指出的,浏览器默认使用 Windows 的换行符。

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

    然后是要走的路

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2021-08-03
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多