PHP nl2br发帖副本<br/>的?

时间:2012-01-06 01:28:13

标签: php

我正在使用以下代码将文本框的内容发布到HTML文件。提交信息后,我希望在换行符处插入<br/>。我认为使用此代码可以解决问题:

$content = nl2br($_POST['content']);

但是如果已经有<br />,它似乎产生了以下内容:

  

Lorum ipsum。<br /><br />

我该如何解决这个问题?

邮政编码:

<?php
$fn = "people.html";
if (isset($_POST['content']))
{
    $content = stripslashes('content');
    $content = nl2br($_POST['content']);
    $fp = fopen($fn,"w") or die ("Error opening file in write mode!");
    fputs($fp,$content);
    fclose($fp) or die ("Error closing file!");
}
?>

如何提交:

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
    <textarea rows="25" cols="40" name="content"><?php readfile($fn); ?></textarea>
    <input type="submit" value="Sauver"> 
</form>

3 个答案:

答案 0 :(得分:2)

根据我的理解,如果您的插入的html已包含<br />标记,那么由于\n之后的<br />,它会添加两个,为了解决此问题,您需要删除使用str_replace或regex输入的额外中断标记。

然后,当将结果回显给textarea时,你应该使用:<?=htmlentities(file_get_contents($fn))?>作为SpoonNZ的建议。

注意:使用用户提交的html而不通过表单中的htmlentities$_SERVER["PHP_SELF"]将向您开放XSS

答案 1 :(得分:2)

您不应将您的换行符<br>存储在持久存储(您的文本文件)中。在文本文件中,换行符应存储为换行符("\n")。将它们输出到HTML时,只应将它们转换为HTML <br>标记。您还需要转义您放入HTML的任何用户提供的内容(为什么,请阅读The Great Escapism)。

if (!empty($_POST['content'])) {
    file_put_contents('people.txt', $_POST['content']);
}

然后:

<textarea rows="25" cols="40" name="content"><?php
    echo nl2br(htmlspecialchars(file_get_contents('people.txt')));
?></textarea>

这种方式换行符总是换行符,它们只需要转换为<br>,因为这是在HTML上下文中保存它们的唯一方法。

至于为什么换行加倍,似乎在某些时候添加了一个额外的换行符,可能是在提交textarea内容时由浏览器添加。您可能希望trim输入/输出以避免任何前导或尾随空格。

答案 2 :(得分:1)

//$content = stripslashes('content');
$content = preg_replace('~\s*<br ?/?>\s*~',"<br />",$_POST['content']);
$content = nl2br($content);

这样的东西应该为你划掉多余的空白。

另外,你为什么要使用stripslashes?只有在你有魔术引号时才应该这样做,而你不应该有魔法引号。无论如何,你还有这条线的语法错误。

编辑:仍然试图解释你在说什么。我认为这可能会有所帮助:

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
    <textarea rows="25" cols="40" name="content"><?htmlentities(preg_replace('~\s*<br ?/?>\s*~i',"\n",(file_get_content($fn))); ?></textarea>
    <input type="submit" value="Sauver"> 
</form>'

将从正确的数据开始。也许