PHP、mySQL、换行符和文本区域
Posted
技术标签:
【中文标题】PHP、mySQL、换行符和文本区域【英文标题】:PHP, mySQL, line breaks, and textareas 【发布时间】:2012-07-14 07:37:28 【问题描述】:我有一个文本区域。用户在 textarea 中输入文本,其中可以包含用于格式化目的的换行符。我将此文本按原样保存到 mysql 数据库,而不添加 html br 中断。这看起来像“text blah blah。\n\nText2 blah blah。”在数据库记录中。
我使用 echo nl2br($text);
在常规 HTML 页面上显示文本,文本格式很好,两个换行符显示为两个句子,它们之间有一个空行。
当我将相同的文本发送到预先填充的文本区域以供用户编辑其原始条目时,我使用以下代码:
<textarea><?php echo $text;?></textarea>
我希望我会得到一个文本区域,其中包含一些存储在数据库中的双换行符。在这种情况下,我不使用 nl2br,因为这样做只会显示 HTML 字符(实际上不会创建换行符——换句话说,向用户显示 br 的 6 个字符)。相反,我得到的是剥离任何双新线,因此两条新线背靠背现在是单新线。单个新行不会被完全删除 - 它们只是保持单个新行。
因此,简而言之,当我发送格式应在文本行之间包含一个空行的文本时,我得到的只是一个新行,破坏了文本的重要格式)。
在将文本从数据库输出到文本区域时,如何保留所有换行符?
【问题讨论】:
【参考方案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 文本之间出现一个空白行。
检查您的文本没有在其他地方被破坏,并且确实在数据库中作为双换行符。
【讨论】:
现在我有点迷糊了...我将您的代码直接复制到我的中(完全跳过了数据库),我得到了 4 行文本,没有空行 3。我查看了 CSS并且空白属性不是我定义的(浏览器默认为空白:预包装;在 IE 和 Chrome 中看起来相同)——这可能是问题吗? 也在 FF 中尝试过 - 同样的故事,并尝试更改空白的 css 属性。尽管 \n\n 输出肯定没有两个换行符 - PHP 设置可能是罪魁祸首吗? 确认您的代码按原样运行——在加载到文本框后必须修改我的 HTML...是时候筛选 JS 并查看是否有任何内容被删除... 【参考方案2】:你可以试试... echo str_replace("\n", "\r\n", $txt)
这个简单的读取换行符并将它们转换为textareas可以清楚理解的新行:)希望这会有所帮助。
谢谢。
【讨论】:
【参考方案3】:我遇到了同样的问题,但经过一些故障排除后,我的发现如下:
无论值是来自 db、session 还是 cookie,所有文本区域都显示 \n\n 并带有换行符。
但是,如果 HTML 页面被缩小,空行会随着最终 HTML 被缩小而消失。有利于减小页面大小的方法会从文档中清除空白。
检查实际的 HTML 可以证明这一点。
我将我的 OWN 缩小功能与输出缓冲区一起使用,因此我只为该页面添加了一个例外。
=> 我的意思是不要监控包含重要文本区域的页面!
标头中的 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");
注意: 仅此代码没有任何作用。如果您有任何 3rd 方 HTML 缩小器,或通过另一台服务器传输的 HTML,例如Google Page Speed 您需要在某处(MINIFY 发生的地方)找到页面的例外列表
附:更聪明的方法是增强您的 MINIFY 功能,而不是在 textarea 标签之间进行 MINIFY 文本
【讨论】:
以上是关于PHP、mySQL、换行符和文本区域的主要内容,如果未能解决你的问题,请参考以下文章