我在wordpress博客上有这个text editor,我希望使用HTML Purifier
来净化用户'在插入数据库之前输入。文本编辑器是一个iframe,因此我使用
document.getElementById("comments_comments").value=$("#textEditor").contents().find("body").html();
当用户点击提交按钮时。
我遵循html净化器的基本指令,如下:
if (isset($_SESSION["user"]) && $_SESSION["user"] != "")
{
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$comments = $purifier->purify($_POST["comments"]);
$sql = $wpdb->prepare ("INSERT INTO mytable SET comments = %s",array($comments));
$wpdb->query($sql);
}
但代码根本没有任何影响。我希望<script>
标签完全删除,但它们仍然存储在数据库中,并且&amp; LT;脚本&amp; gt;我认为这是wpdb准备语句的工作。上述配置不适用于$_POST
吗?任何帮助将不胜感激。
答案 0 :(得分:0)
首先请确保,您真的不允许使用此标记:
$config->set('HTML.ForbiddenElements', ['script']));
你说的是在数据库中以此结尾:
& lt ;script & gt ;
您确定,您还没有使用htmlspecialchars()
吗?也许有这样的事情?
foreach ($_POST as $key => $value) {
$_POST[$key] = htmlspecialchars($value)
}
我99,99%肯定,它与数据库无关。如果你做var_dump($comment)
而不是插入数据库,它将是相同的。