PHP,mySQL,换行符和textareas

时间:2012-07-14 21:54:17

标签: php mysql textarea newline

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

这对我有用:

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

<body>

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

</body>

</html>

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

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

答案 1 :(得分:1)

您可以尝试... echo str_replace(&#34; \ n&#34;,&#34; \ r \ n&#34;,$ txt)

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

感谢。

答案 2 :(得分:0)

我遇到了同样的问题,但经过一些故障排除我的调查结果如下:

所有textareas都显示\ n \ n,如果来自db,session或cookie,则无论是否为值,都会显示换行符。

但是如果HTML页面是MINIFIED,那么空行会在最终HTML缩小时消失。支持减少页面大小的空格从文档中清除空白。

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

我在输出缓冲区使用我的OWN minify函数,所以我只为该页面包含了一个例外。

=&GT;我的意思是不要点击持有重要文本区域的页面!

标题中的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");
}

注意: 这个代码没有任何作用。如果您有任何第三方HTML缩小器,或通过另一个服务器管道输入的HTML,例如您需要为某个页面(MINIFY发生的地方)找到例外列表的Google Page Speed

P.S。更智能的方法是增强您的MINIFY功能,而不是在textarea标签之间使用MINIFY文本