【问题标题】:PHP Sanitized markdown - html outputPHP Sanitized markdown - html 输出
【发布时间】:2011-10-03 04:04:45
【问题描述】:

我的网站上有 WMD 编辑器,我将降价存储在数据库中。但在我将降价发送到数据库之前,我使用 mysql_real_escape_string 对其进行过滤,如下所示:

$to_database = mysql_real_escape_string($_POST['markdown']);

而且没关系。但现在我想展示它,所以我使用 PHP Markdown(将 Markdown 转换为 html)。但问题是它向我显示了 \r\n\n 而不是换行符。我尝试了 nl2br 功能,但没有帮助。即使我没有转义输出(不要将 markdown 转换为 html 并使用 htmlpurifier),我仍然会得到 \n 而不是换行符。 只有当我删除 mysql_real_escape_string 时它才会看起来不错。

bbbbbbbbbb 呸呸呸

【问题讨论】:

    标签: php mysql-real-escape-string wmd-editor wmd-markdown


    【解决方案1】:

    它们正在被转换并且不再充当换行符。你想替换它们:

    $markdown = str_replace('\r\n','<br/>',$_POST['markdown']);
    $markdown = str_replace('\n','<br/>',$markdown);
    

    您可能还想这样做:

    $markdown = html_entity_decode($markdown);
    

    【讨论】:

    • 谢谢,但是它在文本中显示了
      (它在源代码中是 <br/>)。我猜 PHP Markdown 以某种方式将
      转换为 html 实体(因为当我删除了 php markdown 处理时,我得到了换行符)。
    • str_replace 接受数组,您可以在一个函数调用中完成:str_replace(array('\r\n','\n'), '&lt;br /&gt;', $_POST['markdown'])
    【解决方案2】:

    您的输入层上可能有一些东西,并使用反斜杠转义传入的字符,因此当您使用 mysql_real_escape_string 时,您实际上得到的是双重转义的内容。

    如果你很不幸,那东西可能是magic_quotes_gpc,在这种情况下你应该尽快get rid of it,或者如果你真的不能,那么work around it

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多