如何在HTML表单中输入文本并将其存储在MYSQL数据库中时保持用户格式?

3
我有一个网站,用户可以在HTML表单中输入文本。由于内容的特殊性,用户可能会想写多个段落。目前,该表单通过POST方式将文本发送到PHP文件,然后将文本插入数据库。在另一页上,该文本从数据库中提取并显示。当它被显示时,所有用户格式都消失了。多个空格和换行符都会被删除。如何保存用户的格式?让他使用HTML标签来格式化不太可行,因为有几个原因。我也考虑过 <pre> 标记,但这会创建布局破坏的长文本行并改变字体。
非常感谢任何帮助。

在表单上,用户是否输入文本并使用所见即所得编辑器进行格式化?如果不是,他们是如何对文本进行格式化的? - sasfrog
我不确定你的意思。他们将其输入到HTML表单中的文本区域中。尝试的格式包括段落之间的换行和多个空格。 - Eric
2个回答

4
我假设您只处理文本区域中输入的纯文本,而不是像其他答案所假设的那样使用一些高级HTML编辑器。您失去换行符的原因是HTML不将换行符视为换行符。换行符被视为另一个空格。只有<br>被视为换行符。(在XHTML中为<br />)。如果是这种情况,您可以使用nl2br()函数将所有换行符转换为<br>
多个空格更难处理。HTML不区分一个空格和多个空格。空格、制表符、换行符或任何组合都没有关系,它们都被视为单个空格。防止这种情况的一种方法是将整个内容包装在<pre><code>块中。但是,除非您要显示计算机代码,否则这很丑陋。
或者,如果您真的非常需要这些额外的空格,您可以将所有空格替换为&nbsp;,这会强制Web浏览器显示额外的空格。(请参见下面的编辑部分。)
编辑:保留换行符和多个空格的定义版本,并防止XSS。
<?php echo nl2br(str_replace('  ', ' &nbsp;', htmlspecialchars($text))); ?>

2

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接