【问题标题】:HtmlPurifier disformats inputHtmlPurifier 使输入变形
【发布时间】: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 让它工作:)

抱歉这篇大文章

【问题讨论】:

  • 可能不支持多个类
  • 刚刚添加了演示站点的链接,可以看到它支持。
  • 你确定&lt;i class="fa fa-angellist"&gt;&lt;/i&gt;是传递给HTMLPurifier的整个字符串
  • 是的,字符转换为数据库为:&lt;i class="&amp;quot;fa"&gt;&lt;/i&gt; 应该不仅仅是&lt;i class=""fa"&gt;&lt;/i&gt; 作为输出
  • 好的...我刚刚做了一个“硬编码”测试:` 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


【解决方案1】:

脚本本身有代码充当magic_quotes_gpc ON,所以当检测到它在你的服务器环境中被关闭时,函数就会被执行。

上述具体情况的解决方案是在将数据插入数据库之前简单的stripslashes()

所以 HTMLPurifier 完成了它应该做的工作。

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多