保留通过PHP输入用户的输入

时间:2009-08-22 01:09:30

标签: php postgresql newline enter

如何保存用户在数据库中提供的“输入”并将其显示给其他用户?

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

 pg_escape_string
 pg_prepare
 pg_execute

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

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

2 个答案:

答案 0 :(得分: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
  它也很短。

答案 1 :(得分:3)

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

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