Санитарная обработка ввода HTML - PullRequest
8 голосов
/ 01 апреля 2011

Я думаю о добавлении редактора форматированного текста, чтобы позволить непрограммисту изменить аспект текста.Однако одна проблема заключается в том, что возможно искажать макет отображаемой страницы, если разметка неверна.Какой хороший легкий способ дезинфицировать HTML?

Ответы [ 4 ]

18 голосов
/ 01 апреля 2011

Вам придется выбирать между хорошим и легким весом.Рекомендуемый выбор - «HTMLPurifier», поскольку он обеспечивает безопасные настройки по умолчанию.В качестве более быстрой альтернативы часто рекомендуется использовать ' htmLawed '.

См. Также этот довольно объективный обзор от автора HTMLPurifier: http://htmlpurifier.org/comparison

6 голосов
/ 01 апреля 2011

Мне действительно нравится HTML Purifier , который позволяет вам указать, какие теги и атрибуты разрешены в вашем HTML-коде, и генерирует действительный HTML.

2 голосов
/ 01 апреля 2011

Используйте BB коды (или как здесь на SO), иначе шансы очень малы Пример функции ...

function parse($string){

    $pattern = array(
    "/\[url\](.*?)\[\/url\]/",
    "/\[img\](.*?)\[\/img\]/",
    "/\[img\=(.*?)\](.*?)\[\/img\]/",
    "/\[url\=(.*?)\](.*?)\[\/url\]/",
    "/\[red\](.*?)\[\/red\]/",
    "/\[b\](.*?)\[\/b\]/",
    "/\[h(.*?)\](.*?)\[\/h(.*?)\]/",
    "/\[p\](.*?)\[\/p\]/",    
    "/\[php\](.*?)\[\/php\]/is"
    );

    $replacement = array(
    '<a href="\\1">\\1</a>',
    '<img alt="" src="\\1"/>',
    '<img alt="" class="\\1" src="\\2"/>',
    '<a rel="nofollow" target="_blank" href="\\1">\\2</a>',
    '<span style="color:#ff0000;">\\1</span>',
    '<span style="font-weight:bold;">\\1</span>',
    '<h\\1>\\2</h\\3>',
    '<p>\\1</p>',
    '<pre><code class="php">\\1
); $ string = preg_replace ($ pattern, $ replace, $ string); $ string = nl2br ($ string); вернуть $ string; }

...

echo parse("[h2]Lorem Ipsum[/h2][p]Dolor sit amet[/p]");

Результат ...

<h2>Lorem Ipsum</h2><p>Dolor sit amet</p>

enter image description here

Или просто используйте очиститель HTML:)

1 голос
/ 10 мая 2011

Хорошо подходят и HTML-очиститель, и htmLawed. htmLawed обладает преимуществом гораздо меньшей занимаемой площади и высокой конфигурируемости. Помимо выполнения стандартной работы по балансировке тегов, фильтрации определенных тегов HTML или их атрибутов или содержимого атрибутов (через белые или черные списки) и т. Д., Он также позволяет использовать пользовательские функции.

...