Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP nl2br过账重复<;br/>';s_Php - Fatal编程技术网

PHP nl2br过账重复<;br/>';s

PHP nl2br过账重复<;br/>';s,php,Php,我使用以下代码将文本框的内容发布到HTML文件中。提交信息时,我希望在换行符处插入。我认为使用此代码可以解决问题: $content=nl2br($_POST['content']) 但是,如果已经有了,它似乎会产生以下结果: 益普生木。 我该如何补救 邮政编码: <?php $fn = "people.html"; if (isset($_POST['content'])) { $content = stripslashes('content'); $content =

我使用以下代码将文本框的内容发布到HTML文件中。提交信息时,我希望在换行符处插入

。我认为使用此代码可以解决问题:

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

但是,如果已经有了

,它似乎会产生以下结果:

益普生木。


我该如何补救

邮政编码:

<?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>
/$content=stripslashes('content');
$content=preg\u replace(“~\s*\s*”,“
,$”POST['content']); $content=nl2br($content);
像这样的东西应该为您去除换行符周围多余的空白

还有,为什么要使用斜杠呢?这应该只有在你有魔法引号的时候才有必要,你不应该有魔法引号。无论如何,你也把那行的语法弄错了

编辑:仍在试图解释你所说的。我想这可能会有帮助:

<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>'

据我所知,如果您插入的html已经包含了一个

标记,那么由于
\n

之后,它会添加两个标记,为了解决这个问题,您需要使用str\u replace或regex从输入中删除额外的break标记

然后,当将结果回显到文本区域时,您应该使用:
,正如斯彭茨建议的那样


注意:在表单中使用用户提交的html而不通过
htmlentities
$\u服务器[“PHP\u SELF”]
将打开到XSS

您不应该将换行符作为

存储在永久性存储(文本文件)中。在文本文件中,换行符应存储为换行符(
“\n”
)。当您将它们输出为HTML时,只应将它们转换为HTML

标记。您还需要将任何用户提供的内容转义到HTML中(为什么,请阅读)

然后:


这样,换行符在任何时候都是换行符,它们只需要转换为

s,因为这是在HTML上下文中保存它们的唯一方法


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

美元POST数据是什么样子的?从您所说的内容来看,内容是
Lorem ipsum
\n
?这是一个完美的预期结果。它看起来像是我在我的帖子《Lorum ipsum》中的引号。

@deceze不,我试图做到的是,当我在文本框中键入有换行符的内容时,它会将此换行符记录为

,并将其提交到
.html
文件中。现在的情况是,即使在已经有一条线路断开后,这种情况仍在继续。假设我有一个换行符,我点击submit,它会生成一个

。如果我再提交一次,有两个,等等。你怎么再提交一次呢?我遇到了和以前一样的问题。如果我提交以下文本,
第一行**换行符**第二行。
,它发布以下代码:
第一行。
第二行。
。页面提交代码后,将重新加载并通过
中的此行显示更改。如果我再次提交表单,不做任何更改,它会将第二个

添加到前面的表单:
第一行。


第二行。
修复因某个问题而损坏的数据从来都不是一个好主意,而不是修复问题的根源。首先,你应该在文本框中填充
。我在这方面支持@zerkms——这是一个根本问题,虽然我的代码将对其进行修补,但这不是一个正确的修复。你能举一个
$fn
内容的例子吗?事实上,我认为你在将文件读入文本框时甚至可能想全力以赴地使用
——只是想弄清楚你到底在问什么,但这可能会有所帮助。。。
<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>'
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>