您如何在数据库中保留用户给出的“输入”并将其显示给其他用户?
我存储用户的问题,并使用以下函数分别清理用户数据、准备数据和执行 SQL 命令。
pg_escape_string
pg_prepare
pg_execute
我使用htmlentities
withENT_QUOTES
来转换数据 HTML。此过程删除问题中的所有输入,显然是 \n 形式。
我希望有一个与 SO 类似的问题系统:仅向用户显示双输入作为换行符。
您如何在数据库中保留用户给出的“输入”并将其显示给其他用户?
我存储用户的问题,并使用以下函数分别清理用户数据、准备数据和执行 SQL 命令。
pg_escape_string
pg_prepare
pg_execute
我使用htmlentities
withENT_QUOTES
来转换数据 HTML。此过程删除问题中的所有输入,显然是 \n 形式。
我希望有一个与 SO 类似的问题系统:仅向用户显示双输入作为换行符。
你打电话后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
它也很短。
PHP 的 nl2br() 函数应该可以解决问题,并允许您将 \n 字符转换为<br>
html 标记。
要启用“两个输入换行”行为,您应该运行正则表达式将每对连续<br>
标签转换为单个<br>
标签(您也可以在文本上运行 nl2br() 之前使用 \n 字符执行此操作)。