я пытаюсь заставить 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 пусть работает 🙂
Извините за большой пост
В самом скрипте есть код, который действует как magic_quotes_gpc ON, поэтому, когда обнаруживается, что он выключен в среде вашего сервера, выполняется функция.
Решение в приведенном выше конкретном случае является простым stripslashes()
прежде чем данные будут вставлены в базу данных.
Так что HTMLPurifier делает все как положено.
Других решений пока нет …