$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(使用前将#替换为@)