保留textarea中的换行符


75

我有一个带有textarea的表单,我想保留用户在输出内容时输入的换行符。

例如,如果我在textarea中写:

这是一个句子。这是另一个。这里还有一个。

这是一个新段落。这是一个新句子。这是另一个。

我想要相同的输出,而不是

这是一个句子。这是另一个。这里还有一个。这是一个新段落。这是一个新句子。这是另一个。

如何保留换行符?

Answers:


155

通常,您只需要添加

  • white-space: pre-line;空格修剪为单个空格

  • white-space: pre-wrap; 保留所有空白

到元素的样式(CSS),您要在其中使用换行符显示文本。


太棒了,太棒了!
lovecoding

16

用户输入的换行符保存下来,无论是HTML还是PHP直接丢弃或变造任何东西。但是,为可视化呈现HTML标记时,会使用一种方式对换行符进行编码。有非常好的理由。因此,您要做的是将现有的换行符“翻译”为html样式的换行符。

如何执行此操作取决于您所处的环境。通常,您必须将换行符转换\n<br>标签。该php脚本语言提供了一个功能,这个例如:nl2br()

但是请注意:仅在将文本呈现为html标记时适用。但这并不适用,当你的文本输出到一个文本形式的内部再次允许改变它的例子。在这种情况下,您必须保留原始的换行符。

因此,您通常要做的是:将未更改的文本输入保存为已接收。当再次将文本输出到客户端时,例如说从以前保存过文本的数据库中读取文本之后,便知道了情况以及如何显示文本。那就是您翻译或保留现有换行符的位置。

您还可以<pre>...</pre>标签对包含换行符的未更改文本进行编码,因此将其标记为以预格式化的形式呈现。例如,在html页面中显示源代码时就可以完成此操作。


当我在许多不同的项目上经历了大约5年的这个问题时,为什么这个论坛充满这样的问题,并且答案都是相似的?我尝试使用javascript hack,pre标签,CSS空白规则,但似乎没有任何效果。这些项目大多数是使用Flask或Pyramid和(当然)Javascript的Python Web应用程序。而且我通常在Chrome中进行调试,因此这似乎是最麻烦的浏览器。即使在此注释字段中键入并按Enter键,所有换行符都将被删除!那么,这么多人怎么会认为这不是问题呢?
Kenny83

抱歉,我确实注意到,当您单击编辑时确实再次显示了换行符...证明了这些换行符发送到服务器并保存在数据库中。但是我发誓我遇到这个问题的次数比过去更多。
Kenny83

@ Kenny83好的,太好了,您有个想法。如前所述:这两种类型的换行符都有很好的理由。这并不能说有没有可能在应用中移除换行符过滤步骤。我只说过,在html或php中没有自动过滤器或类似的东西。
arkascha '16

抱歉,我并不是故意以自以为是的a $$脱身,这显然是我的意思。我的沮丧完全是由于这样的事实,是的,很多人对此没有问题,但是我确实这样做,而其他人显然也这样做,因此他们发表了这些问题。我猜我们只是不太了解换行符是如何发送到服务器等的。您能否向我解释为什么在浏览器开发工具中的表单提交处理程序的第一行中放置Javascript断点,并检查textarea的值显示“第一行第二行第三行”而不是“第一行\第二行\第三行”?
Kenny83

1
嗯,很有趣。。。谢谢。也只需在服务器上设置一个Python断点,并注意接收到的值肯定是“第一行第二行第三行”而不是“第一行\第二行\第三行” ...所以我怀疑JQuery,Javascript本身或其他东西客户端方面的问题...无论如何,感谢您的帮助,我肯定会尝试使用hexeditor的:-)
Kenny83 '16


-1

您将输出保持原样在textarea中。您将收到作为字符串输出的输入,string(write to file)该字符串将textarea添加到输入字符串。

for eg.
<?php
$txt = $_POST["inputstr"];
$txt1 = "<textarea>". $txt ."</textarea>";
$file = fopen("file.html","a+");
fwrite($file, $txt1);
fclose($file);
?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.