1

我有一个文本区域。用户在 textarea 中输入文本,其中可以包含用于格式化目的的换行符。我将此文本按原样保存到 mySQL 数据库,而不添加 HTML br 中断。这看起来像“text blah blah。\n\nText2 blah blah。” 在数据库记录中。

我在常规 HTML 页面上显示文本,echo nl2br($text);文本格式很好,两个换行符显示为两个句子,它们之间有一个空行。

当我将相同的文本发送到预先为用户编辑其原始条目的文本区域时,我使用以下代码:

<textarea><?php echo $text;?></textarea>

我希望我会得到一个充满文本的文本区域,其中包括一些存储在数据库中的双换行符。在这种情况下,我不使用 nl2br,因为这样做只会显示 HTML 字符(实际上不会创建换行符——换句话说,向用户显示 br 的 6 个字符)。相反,我得到的是剥离任何双新线,因此两条新线背靠背现在是单新线。单个新行不会被完全剥离——它们只是保持单个新行。

所以,简而言之,当我发送格式应该在文本行之间包含一个空行的文本时,我得到的只是一个新行,破坏了文本的重要格式)。

将文本从数据库输出到文本区域时,如何保留所有换行符?

4

3 回答 3

1

这对我有用:

<?php
$txt = "line1\nline2\n\nline4\nline5";
?>
<html>

<body>

<form>
<textarea rows=10><?php echo $txt ?></textarea>
</form>

</body>

</html>

请注意缺少line3text 和 double \n\n。正如预期的那样,在 Firefox 中加载此表单会在 line2/line4 文本之间出现一个空白行。

检查您的文本是否没有在其他地方被破坏,并且确实在数据库中作为双换行符。

于 2012-07-14T22:05:55.467 回答
1

你可以试试... echo str_replace("\n", "\r\n", $txt)

这个简单的读取换行符并将它们转换为textareas可以清楚理解的新行:)希望这会有所帮助。

谢谢。

于 2013-07-16T07:05:28.127 回答
0

我遇到了同样的问题,但经过一些故障排除后,我的发现如下:

无论值是来自数据库、会话还是 cookie,所有文本区域都显示带有换行符的 \n\n。

但是如果 HTML 页面被缩小,空行会随着最终的 HTML 被缩小而消失。有利于减少页面大小的方法是从文档中清除空白。

检查实际的 HTML 可以证明这一点。

我将我的 OWN minify 函数与输出缓冲区一起使用,因此我只为该页面添加了一个异常。

=> 我的意思是不要 monify 包含重要文本区域的页面!

标头中的 PHP 代码如下所示:

$minify_exceptions = array(
    "page1.php",
    "page2.php"
);
if (isset($file_route) && in_array($file_route, $minify_exceptions)) {
    ob_start();
} else {
    ob_start("minify_html");
}

注意:仅此代码没有任何作用。如果您有任何第 3 方 HTML 缩小器,或通过其他服务器传输的 HTML,例如 Google Page Speed,您需要在某处(MINIFY 发生的地方)找到页面的例外列表

PS更聪明的方法是增强你的MINIFY功能而不是在textarea标签之间MINIFY文本

于 2016-03-22T10:36:36.537 回答