【问题标题】:How to stop database data from breaking an HTML page?如何阻止数据库数据破坏 HTML 页面?
【发布时间】:2012-05-20 08:52:28
【问题描述】:

我知道从表单中获取数据并将其放入 MySQL 数据库时,应使用 mysql_real_escape_string() 对数据进行转义以防止 SQL 注入。我的问题有点不同。

我正在从 MySQL 数据库中提取数据,然后将其显示在页面上,但我遇到了问题。假设我的数据如下所示:

This is some test data, and here's a quote. For good measure, here are "some more" quotes.

现在,我的 php 代码是这样的:

echo '<input type="text" value="' . $data . '">';

这会导致 HTML 页面损坏,因为数据在其中包含引号,并且它显示在包含带引号的数据的输入标记内。

看到问题了吗?

什么是最好的解决方案?

【问题讨论】:

  • 使用参数代替 :D 以免重新发明轮子:参见这篇最优秀的以前的 SO 文章 stackoverflow.com/questions/60174/…
  • @xQbert -- 你能详细说明一下吗?
  • 查看添加到第一条评论的链接;但可能 Marc B(准备好了)用这个具体的例子一针见血。

标签: php mysql


【解决方案1】:

就像 mysql_real_escape_string() 用于 SQL 操作一样,在 HTML 方面,它是 htmlspecialchars()

【讨论】:

    【解决方案2】:

    您需要为 html 实体转义数据:

    echo '&lt;input type="text" value="' . htmlentities($data) . '"&gt;';

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

      echo '&lt;input type="text" value="' . stripslashes($data) . '"&gt;';

      最好能将 php 代码与 html 分开。

      &lt;input type="text" value="&lt;?php echo stripslashes($data);?&gt;"&gt;

      谢谢:)

      【讨论】:

        猜你喜欢
        • 2015-07-05
        • 1970-01-01
        • 2014-02-17
        • 2012-10-01
        • 2016-04-26
        • 2017-04-27
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        相关资源
        最近更新 更多