gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:49:56 25 4
gpt4 key购买 nike

$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 标志常量。

根据手册:

ENT_QUOTES Will convert both double and single quotes.
A bitmask of one or more of the following flags, which specify how to handle quotes and which document type to use. The default is ENT_COMPAT | ENT_HTML401.

ENT_COMPAT 生成 susan's

所以你的代码最终是:

$string = htmlspecialchars_decode($string, ENT_QUOTES);

注意:根据使用哪个 API 插入它,您需要知道在不使用 stripslashes() 的情况下转义它如果是这种情况,可能会产生 susan\'s,这是另一个不希望的结果。

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

这将有助于防止 SQL 注入(inject)。


When I echo out $sql, it shows correct one: INSERT INTO database SET name="susan's",

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

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

关于php - 即使我使用 html_entity_decode,html 实体也会被传递到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com