我有一个网站,用户将文本输入到html表单中。内容的性质使得用户可能想要写多个段落。现在,表单通过POST将文本发送到PHP文件,该文件将文本插入数据库。在另一页上,文本将从数据库中提取并显示。显示时,所有用户格式都消失了。删除多个空格和换行符。如何保存用户的格式?由于几个原因,指示他使用HTML标记进行格式化是不可行的。我也考虑过了
<pre>
标签,但会创建布局中断的长行文本并更改字体。
非常感谢任何帮助。
答案 0 :(得分:4)
我假设你只处理了一堆输入textarea的纯文本,而不是其他回答者假设的一些奇特的HTML编辑器。
您的换行丢失的原因是HTML不会将换行符视为换行符。换行被视为另一个空间。只有<br>
被视为换行符。 (或XHTML中的<br />
)如果发生了这种情况,您可以使用nl2br()
函数将所有换行符转换为<br>
。
多个空格更难。 HTML不区分一个空格和多个空格。空格,制表符,换行符或其任何组合,无关紧要,它们都被视为单个空格。防止这种情况的一种方法是将整个内容包装在<pre>
或<code>
块中。但除非你试图显示计算机代码,否则这很难看。
或者,如果您真的绝对需要这些额外的空间,您可以用
替换所有空格,这会强制Web浏览器显示额外的空间。 (见下面的编辑。)
编辑:保留两个换行符和多个空格的最终版本,并且还会阻止XSS:
<?php echo nl2br(str_replace(' ', ' ', htmlspecialchars($text))); ?>
答案 1 :(得分:2)
您可以在初始表单上使用富文本编辑器(TinyMCE,CKEditor),这将允许用户创建标记,而无需知道如何编写HTML。
然后将提交的标记保存到您的数据库中(可选择将其过滤以进行不需要的标记/脚本编写)。
显示时,不要使用htmlspecialchars
/ htmlentities
,因为您希望将内容解释为HTML。