Подтвердить что ты не робот

PHP - HTML очиститель - привет w <o> rld/world tutorial striptags

Я просто изучаю использование очистителя HTML, чтобы убедиться, что введенная пользователем строка (которая представляет имя человека) дезинфицирована.

Я не хочу разрешать любые html-теги, script, разметку и т.д. - Мне просто нужны буквы, цифры и нормальные знаки пунктуации.

Огромное количество опций, доступных для очистителя HTML, является довольно сложным, и, насколько я вижу, документы, похоже, не имеют начального/среднего или конечного

см. http://htmlpurifier.org/docs

Есть ли простой учебник по миру приветствия для HTML-очистителя, который показывает, как очистить строку, удаляя из нее все плохие вещи.

Я также рассматриваю просто использование стриптиз-тегов:

или PHP в дезинформировании данных

4b9b3361

Ответ 1

Я использую HTMLPurifier для дезинфекции вывода богатого текстового редактора и в итоге:

include_once('htmlpurifier/library/HTMLPurifier.auto.php');

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional');

if (defined('PURIFIER_CACHE')) {
    $config->set('Cache', 'SerializerPath', PURIFIER_CACHE);
} else {
    # Disable the cache entirely
    $config->set('Cache', 'DefinitionImpl', null);
}

# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
    $input = $cleaner;
}

$filter = new HTMLPurifier($config);
$output = $filter->purify($input);

Основные достопримечательности:

  • Включить автозагрузчик.
  • Создайте экземпляр HTMLPurifier_Config как $config.
  • При необходимости настройте параметры конфигурации, используя $config->set().
  • Создайте экземпляр HTMLPurifier, передав ему $config.
  • Используйте $filter->purify() на вашем входе.

Тем не менее, он полностью переполняет то, что не требует разрешения HTML на выходе.

Ответ 2

Вы должны выполнить проверку ввода на основе содержимого - например, вместо использования некоторого регулярного выражения для имени

'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend

эта проверка должна хорошо выполнять эту работу. И затем избегайте вывода при печати на странице с предпочтительным htmlspecialchars.

Ответ 3

Вы можете использовать someting как htmlspecialchars(), чтобы сохранить символы, введенные пользователем, без интерпретации браузера.

Ответ 5

Самый простой способ удалить все небуквенные символы из строки, я думаю, это использовать RegEx.Replace() следующим образом:

Regex.Replace(stringToCleanUp, "[\ W]", "");

В то время как \w (нижний регистр) соответствует любому символу слова, эквивалентному [a-zA-Z0-9_] \ W соответствует любому символу, отличному от слова, т.е. все, что НЕ соответствует \w. В приведенном выше коде будет использоваться \W (в верхнем регистре) и ничего не заменяется.

В качестве альтернативы, если вы не хотите разрешать подчеркивание, вы можете использовать [^ a-zA-Z0-9], например:

Regex.Replace(stringToCleanUp, "[^ a-zA-Z0-9]", "");

Ответ 6

Если вы пытаетесь избежать атак с инъекциями кода, просто просмотрите данные и сохраните их и распечатайте, как введенный пользователем.

Например: если вы хотите избежать проблем с SQL Injection в MySQL, используйте функцию mysql_real_escape_string() или аналогичную для дезинфекции предложения SQL. *

Другой пример: запись данных в документ HTML, анализ данных с помощью html_entities(), поэтому данные будут отображаться как ввод пользователем.

Ответ 7

Для простоты вы можете использовать strip_tags() или заменить вхождения <, > , и и &lt;, &gt; и &amp; соответственно. Это определенно не лучшее решение, но самое быстрое.

Ответ 8

я обычно очищаю все пользовательские данные перед отправкой в ​​мою базу данных со следующими

mysql_reql_escape_string( htmlentities( strip_tags($str) ));

Ответ 9

Нашел это неделю назад... ЛЮБИТЕ его.

"Простой PHP DOM-парсер PHP, написанный на PHP5 +, поддерживает недействительный HTML и обеспечивает очень простой способ обработки элементов HTML". http://simplehtmldom.sourceforge.net/

// Example
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);

echo $e->tag; // Returns: " div"
echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
echo $e->innertext; // Returns: " foo <b>bar</b>"
echo $e->plaintext; // Returns: " foo bar"

Вы также можете прокручивать и удалять отдельные теги и т.д. Документы и примеры довольно хороши... Я нашел его простым в использовании в нескольких местах.: -)