【问题标题】:Preserving enters in user's input by PHP通过 PHP 保存输入用户的输入
【发布时间】:2010-11-21 20:07:31
【问题描述】:

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

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

 pg_escape_string
 pg_prepare
 pg_execute

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

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

【问题讨论】:

    标签: php postgresql newline enter


    【解决方案1】:

    拨打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/' 匹配一个换行符,后跟任意数量的空格,然后是另一个换行符。它用两个&lt;br /&gt; 元素替换任何这样的子字符串。单个换行符被忽略。这也很好,因为它会忽略不可见的多余空格和制表符,例如用户键入以下内容:

    这是一个段落。\n
    很短。\n
    &lt;space&gt;&lt;tab&gt;\n
    这是另一段。\n
    也很短。

    【讨论】:

    • @John - 他是否在 htmlentities 之前或之后调用它并不重要。尽管如此,对于 preg_replace 示例 +1。
    • 不不,小心。顺序很重要:如果你在nl2br 之后调用htmlentities,它会弄乱所有&lt;br /&gt; 标签。
    • @John - 我的立场是正确的,我想我不应该在凌晨 4:30 这样做。
    • 小心这一点:一些浏览器将换行符发布为
      。 htmlentities() 会搞砸一切。 htmlentities() 之前的“br2nl”是合适的。
    【解决方案2】:

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

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

    【讨论】:

    • 如果投反对票的人可以就他们为什么选择投反对票的答案发表评论,那就太好了。如果我上面提供的答案有任何问题,我想知道。人们来这里是为了学习体验——包括我自己:P
    猜你喜欢
    • 2018-04-09
    • 2012-11-17
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多