【问题标题】:saving html content in mysql database在mysql数据库中保存html内容
【发布时间】:2011-10-21 15:45:24
【问题描述】:

我正在使用 php 并尝试在 mysql 数据库中保存一些 html 内容。 html 内容由 ckeditor 生成。内容是这样的-

<p><img align="left" alt="" src="images/1im1.jpg" style="margin:1px 15px 0 0; border:1px solid #cecece; " /> <img alt="If syou love hot sauce" src="images/tit_If-you-love-hot-sauce.jpg" /></p><br>D'elidas is a fine<p>

我在php中使用这个-

$main_data = mysql_real_escape_string($_POST['content']);

这在我的 localhost(xampp) 中运行良好。但不能在网上工作。我的主机使用的是最新版本的 PHP 和 MySQL。保存到在线数据库后,我看到这样-

<p><img align=\"left\" alt=\"\" src=\"images/1im1.jpg\" style=\"margin:1px 15px 0 0; border:1px solid #cecece; \" /> <img alt=\"If syou love hot sauce\" src=\"images/tit_If-you-love-hot-sauce.jpg\" /></p>br>D\'elidas is a fine<p> 

这就是为什么 HTML 不能在我的页面中正确显示的原因。请帮我解决这个问题。这是在引号前添加斜杠。我想保存准确的 html 并显示在前端。

【问题讨论】:

    标签: php mysql html


    【解决方案1】:

    您的托管公司可能开启了魔术引号 - http://php.net/manual/en/security.magicquotes.php

    您不能在代码中禁用它,但此处的示例 2 显示了解决 http://www.php.net/manual/en/security.magicquotes.disabling.php 的方法

    【讨论】:

    • 这些天任何开启了魔术报价的主机都应该停业。
    • 魔术引号,每个 PHP 程序员存在的祸根......他们在想 WTF 吗?
    【解决方案2】:

    听起来您的主机可能已打开magic_quotes_gpc,它会自动在来自 $_GET、$_POST 和 $_COOKIE 的数据的引号和双引号中添加斜杠。

    您可能想要创建一个包装函数来转义 GPC 数据。举个例子……

    function mysql_escape_gpc($dirty)
    {
        if (ini_get('magic_quotes_gpc'))
        {
            return $dirty;
        }
        else
        {
            return mysql_real_escape_string($dirty);
        }
    }
    

    这样你的代码是可移植的,不管服务器是如何配置的。

    此外,如果您的生产环境支持它,您应该考虑查看准备好的语句。这样您就不必担心转义数据,但在 magic_quotes_gpc 开启的情况下您仍然需要取消转义。

    【讨论】:

      【解决方案3】:

      当您从数据库中获取它时,您需要对 HTML 字符串运行 stripslashes()。对吧?

      【讨论】:

      • 你为什么要对我投反对票?我为这个家伙的问题发布了一个简单的解决方案。
      • 允许使用额外的斜杠将 HTML 插入数据库,然后稍后修复它不是解决方案。治疗原因,而不是症状。
      • @StoneGarden 查看前两个答案。
      【解决方案4】:

      我通过在 php 和 mySQL 数据库中使用以下代码段来完成此操作:

      存储到数据库中。您必须在实际的 mySQL Insertcall 中使用以下代码段。我发现如果您先对变量执行此操作,然后将变量放入插入调用中,它将不起作用。该函数必须在 mySQL 语句中。
      mysql_real_escape_string($myValue)

      检索到文本框中的值。假设您的值已经从数据库中检索到,并且现在位于名为 theValues 的数组中。基本上我正在删除任何反斜杠,但在此之前我要确保它可以使用 htmlentities 正确显示。由于您在 HTML 中没有反斜杠,我知道它修复了服务器用 \" 替换引号的地方。如果您确实在 HTML 中遇到一些反斜杠,您只需要在替换函数中更聪明一点。
      $myValue= str_replace("\\", "", htmlentities($theValues->myValue)); echo $myValue;

      回显到页面的原因与上述相同,但 htmlentities 功能使其仅显示 HTML 的文本而不是处理 HTML
      str_replace("\\", "",$myValue)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2015-08-15
        • 2020-07-15
        • 1970-01-01
        • 2017-03-22
        • 2012-03-25
        相关资源
        最近更新 更多