0

您如何在数据库中保留用户给出的“输入”并将其显示给其他用户?

我存储用户的问题,并使用以下函数分别清理用户数据、准备数据和执行 SQL 命令。

 pg_escape_string
 pg_prepare
 pg_execute

我使用htmlentitieswithENT_QUOTES来转换数据 HTML。此过程删除问题中的所有输入,显然是 \n 形式。

我希望有一个与 SO 类似的问题系统:仅向用户显示双输入作为换行符。

4

2 回答 2

7

你打电话后htmlentities(),打电话nl2br()。Web 浏览器会忽略普通的换行符,因此您需要将它们转换为<br />元素才能显示出来。

nl2br— 在字符串中的所有换行符之前插入 HTML 换行符

描述

string nl2br ( string $string [, bool $is_xhtml= true ] )
返回在所有换行符之前插入<br />或插入的字符串。<br>

例如:

echo nl2br(htmlentities($input));

要仅显示双换行符并忽略单个换行符,您可以改用更复杂的字符串替换函数preg_replace

echo preg_replace('/\n\s*\n/', "<br />\n<br />\n", htmlentities($input));

这里'/\n\s*\n/'匹配一个换行符,后跟任意数量的空格,然后是另一个换行符。<br />它用两个元素替换任何这样的子字符串。单个换行符被忽略。这也很好,因为它会忽略不可见的多余空格和制表符,例如如果用户键入以下内容:

这是一个段落。\n
它很短。\n
<space><tab>\n
这是另一段。\n
它也很短。

于 2009-08-22T01:16:00.863 回答
3

PHP 的 nl2br() 函数应该可以解决问题,并允许您将 \n 字符转换为<br>html 标记。

要启用“两个输入换行”行为,您应该运行正则表达式将每对连续<br>标签转换为单个<br>标签(您也可以在文本上运行 nl2br() 之前使用 \n 字符执行此操作)。

于 2009-08-22T01:17:57.820 回答