【发布时间】:2014-10-16 21:45:56
【问题描述】:
我尝试让 htmlpurifier 与我的代码一起工作,如下所示:
if(isset($_POST['selectors_data'])) {
//$selectors_data = tep_db_prepare_input($_POST['selectors_data']);
$selectors_data2 = $_POST['selectors_data'];
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$selectors_data = $purifier->purify($selectors_data2);
}
我尝试插入(newvalue):<i class="fa fa-angellist"></i>
在我的本地主机上,所有魔术引号和对魔术引号的引用都已关闭
当数据被保存时(通过 jQuery $.post)
$.post('ajax_editor.php', {
action: 'update',
selectors_id: id,
selectors_field: field,
selectors_data: newvalue
}, function (data) {
$(' #container ').html(data);
}, "json");
通过以下查询告诉数据插入:
tep_db_query("update " . TABLE_BTS_CSS_SELECTORS . " set selectors_name = '" . $selectors_data . "' where selectors_id = '" . (int)$selectors_id . "'");
并通过以下 db 函数实际插入数据:
function tep_db_query($query, $link = 'db_link') {
global $$link;
$result = mysqli_query($$link, $query) or tep_db_error($query, mysqli_errno($$link), mysqli_error($$link));
return $result;
}
所以,除了 htmlpurifier 之外,整个过程中没有任何东西被替换/剥离/删除 但数据存储为:
<i class=""fa"></i>
我没有选择。
由于我的网站是 utf-8 格式,我也尝试过:
$purifier = new HTMLPurifier();
$selectors_data = $purifier->purify($selectors_data2);
所以没有配置
当我在Htmlpurifier(click to see attempt) 演示站点上进行测试时,一切似乎都很好。
更新:我现在 100% 确定问题不是由 HTMLpurifier 创建的。似乎有一些隐藏的未知代码可以转换 $_POST 语句(对不起)
已解决发现“隐藏代码为:
// handle magic_quotes_gpc turned off.
if (!get_magic_quotes_gpc()) {
do_magic_quotes_gpc($HTTP_GET_VARS);
do_magic_quotes_gpc($HTTP_POST_VARS);
do_magic_quotes_gpc($HTTP_COOKIE_VARS);
}
当然每个 $_GPC 或 $HTTP_GPC 斜线都添加了。
所以一个简单的stripslashes($_POST['selectors_data']) BEFORE HTMLPurifier 让它工作:)
抱歉这篇大文章
【问题讨论】:
-
可能不支持多个类
-
刚刚添加了演示站点的链接,可以看到它支持。
-
你确定
<i class="fa fa-angellist"></i>是传递给HTMLPurifier的整个字符串 -
是的,字符转换为数据库为:
<i class="&quot;fa"></i>应该不仅仅是<i class=""fa"></i>作为输出 -
好的...我刚刚做了一个“硬编码”测试:` if(isset($_POST['selectors_data'])) { //$selectors_data = tep_db_prepare_input($_POST['selectors_data'] ); $selectors_data2 = ''; //$config = HTMLPurifier_Config::createDefault(); $purifier = 新的 HTMLPurifier(); $selectors_data = $purifier->purify($selectors_data2); }` 和它一样工作
标签: php jquery mysqli htmlpurifier