如何维护在HTML表单中输入并存储在MYSQL数据库中的文本的用户格式?

时间:2010-11-03 04:23:23

标签: php mysql html formatting

我有一个网站,用户将文本输入到html表单中。内容的性质使得用户可能想要写多个段落。现在,表单通过POST将文本发送到PHP文件,该文件将文本插入数据库。在另一页上,文本将从数据库中提取并显示。显示时,所有用户格式都消失了。删除多个空格和换行符。如何保存用户的格式?由于几个原因,指示他使用HTML标记进行格式化是不可行的。我也考虑过了     <pre> 标签,但会创建布局中断的长行文本并更改字体。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

我假设你只处理了一堆输入textarea的纯文本,而不是其他回答者假设的一些奇特的HTML编辑器。

您的换行丢失的原因是HTML不会将换行符视为换行符。换行被视为另一个空间。只有<br>被视为换行符。 (或XHTML中的<br />)如果发生了这种情况,您可以使用nl2br()函数将所有换行符转换为<br>

多个空格更难。 HTML不区分一个空格和多个空格。空格,制表符,换行符或其任何组合,无关紧要,它们都被视为单个空格。防止这种情况的一种方法是将整个内容包装在<pre><code>块中。但除非你试图显示计算机代码,否则这很难看。

或者,如果您真的绝对需要这些额外的空间,您可以用&nbsp;替换所有空格,这会强制Web浏览器显示额外的空间。 (见下面的编辑。)

编辑:保留两个换行符和多个空格的最终版本,并且还会阻止XSS:

<?php echo nl2br(str_replace('  ', ' &nbsp;', htmlspecialchars($text))); ?>

答案 1 :(得分:2)

您可以在初始表单上使用富文本编辑器(TinyMCE,CKEditor),这将允许用户创建标记,而无需知道如何编写HTML。

然后将提交的标记保存到您的数据库中(可选择将其过滤以进行不需要的标记/脚本编写)。

显示时,不要使用htmlspecialchars / htmlentities,因为您希望将内容解释为HTML。