HtmlPurifier деформирует ввод

я пытаюсь заставить 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);
}

я пытаюсь вставить (Новое_значение): <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 . "'");

И через следующую функцию БД данные фактически вставляются:

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 (нажмите, чтобы увидеть попытку) демо сайт, все вроде нормально.

ОБНОВЛЕНИЕ: я теперь на 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']) ДО HTMLPurifier пусть работает 🙂

Извините за большой пост

-1

Решение

В самом скрипте есть код, который действует как magic_quotes_gpc ON, поэтому, когда обнаруживается, что он выключен в среде вашего сервера, выполняется функция.

Решение в приведенном выше конкретном случае является простым stripslashes() прежде чем данные будут вставлены в базу данных.

Так что HTMLPurifier делает все как положено.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]