PHP如何取消对HTML的浏览

PHP如何取消对HTML的浏览,php,mysql,Php,Mysql,我有一些存储在数据库中的页面。出于安全目的,所有页面在保存到数据库之前都会转义,但是当我打印页面时,HTML标记仍然会转义。像这样 <a href=\"mypage.se\" alt=\"\">Link</a> 显然,这不太管用,那么我如何取消页面的浏览呢? 我尝试了html实体解码,但没有成功。使用stripslashes():虽然数据在插入数据库之前应该转义,但取出时不应该转义。问题的根本原因是,在收集数据和从数据库中取出后检查数据之间,数据被转义了两次 你应该

我有一些存储在数据库中的页面。出于安全目的,所有页面在保存到数据库之前都会转义,但是当我打印页面时,HTML标记仍然会转义。像这样

<a href=\"mypage.se\" alt=\"\">Link</a>

显然,这不太管用,那么我如何取消页面的浏览呢?
我尝试了html实体解码,但没有成功。

使用
stripslashes()

虽然数据在插入数据库之前应该转义,但取出时不应该转义。问题的根本原因是,在收集数据和从数据库中取出后检查数据之间,数据被转义了两次

你应该追查为什么它两次逃逸并修复它

这可能会使现有数据中断(这取决于数据是在进入数据库时转义两次,还是在退出数据库时转义两次)。如果是这样,你需要把它清理干净。这种形式的转义与HTML无关,可以用HTML反转

清理工作将类似于:

  • 从数据库_表中选择*
  • 创建以更新行
  • 对于每行
    stripslashes
    ,在双转义的数据上,将数据传递给准备好的语句

  • mysql数据库输入字符串应始终使用mysql_real_escape_string()进行转义,当它们出现时,应使用stripslashes()取消转义。 对于像id这样的数字,应该使用int()将其转换为整数,然后检查范围:例如,像id这样的自动递增列默认以1开头。因此,要对从$\u get[]或$\u POST[]获得的任何内容进行验证检查,请检查int()的编号是否大于等于1。 通过int()筛选所有整数。 通过doubleval()过滤所有实数,除非您使用的是货币值,并且您有自己的十进制数类-浮点可能会损坏货币。

    使用
    stripslashes($str)
    检索内容并删除在将内容插入数据库期间添加的斜杠


    谢谢

    为什么您的
    元素具有
    alt
    属性?您的“安全目的”不应意味着内容存储在数据库中时被转义,而应仅意味着为查询转义。如果您的数据库字段包含反斜杠,那么我会考虑重新查看您的保存机制,这是我的错误。Ofc ot没有Alt attributeNo,您正在破坏应用程序的安全性,而不是增强它。您应该只在数据离开PHP时更改数据的表示形式,并且新的表示形式应该适合数据的去向。您当前的插入操作存在根本性缺陷。在检索数据时尝试解决此问题没有帮助。在输入上使用
    mysql\u real\u escape\u string
    并不意味着在输出上需要
    stripslashes
    ;转义是针对查询进行的,而不是数据库中存储的内容。例如,
    INSERT INTO table VALUES('Peter O'Toole')
    在包含
    Peter O'Toole
    (无反斜杠)的字段中生成结果
    SELECT*fromtable
    也不会包含反斜杠。而且您不应该使用
    mysql\u real\u escape\u string
    。PDO和绑定参数是更好的方法。我不明白你为什么要漫谈ID和货币,问题是HTML。