即使我使用html_entity_decode

时间:2018-01-25 14:46:06

标签: php mysql html-entities

$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实体即使在删除它们时也会传递给数据库?

1 个答案:

答案 0 :(得分:3)

您需要使用ENT_QUOTES标志常量。

根据手册:

  

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

ENT_COMPAT生成susan's的位置。

所以你的代码最终成为:

$string = htmlspecialchars_decode($string, ENT_QUOTES);

注意:根据用于插入此API的API,您需要知道在不使用stripslashes()的情况下转义它并且应该是这种情况,可能会产生susan\'s,是另一个不受欢迎的结果。

如果您还没有这样做,请使用预先准备好的声明。

这有助于防止SQL注入。

  

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

提示:在插入数据库之前,请始终查看您的HTML源代码。这将准确揭示将在查询中传递的内容。这也被认为是一个"工具"。

  • Echo和(HTML)源完全是两种不同的动物。