即使我使用 html_entity_decode ,html 实体也会传递到数据库中

2024-02-07

$string = "susan's"; //string is scraped from website
$string = html_entity_decode($string);
$sql = 'INSERT INTO database SET name = "'. $string .'"';

当我回显 $sql 时,它显示正确的一个:INSERT INTO database SET name="susan's",但是当我运行查询时它会插入susan's进入数据库。当我从 phpmyadmin 手动运行查询时,它会插入正确的查询。为什么即使我删除了 html 实体,它们也会传递到数据库?


您需要使用ENT_QUOTES标志常量。

根据手册:

  • https://secure.php.net/manual/en/function.htmlspecialchars-decode.php https://secure.php.net/manual/en/function.htmlspecialchars-decode.php

ENT_QUOTES 将转换双引号和单引号。
以下一个或多个标志的位掩码,指定如何处理引号以及要使用的文档类型。默认为 ENT_COMPAT | ENT_HTML401。

Where ENT_COMPAT产生susan's.

所以你的代码最终是:

$string = htmlspecialchars_decode($string, ENT_QUOTES);

Note:根据用于插入此内容的 API,您需要注意的是,在不使用的情况下转义它stripslashes() https://secure.php.net/manual/en/function.stripslashes.php如果是这种情况,可能会产生susan\'s,这是另一个不希望的结果。

使用准备好的语句(如果您还没有这样做的话,这应该来自用户输入)。

  • https://en.wikipedia.org/wiki/Prepared_statement https://en.wikipedia.org/wiki/Prepared_statement

这将有助于防止 SQL 注入。

  • https://en.wikipedia.org/wiki/SQL_injection https://en.wikipedia.org/wiki/SQL_injection

当我回显 $sql 时,它显示正确的一个: INSERT INTO database SET name="susan's",

Tip:在插入数据库之前,请务必查看 HTML 源代码。这将准确揭示查询中将传递的内容。这也被认为是一种“工具”。

  • Echo 和 (HTML) 源代码完全是两种不同的动物。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使我使用 html_entity_decode ,html 实体也会传递到数据库中 的相关文章

随机推荐