Санитарный ввод HTML

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

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

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

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

Используйте коды 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</code></pre>' ); $string = preg_replace($pattern, $replacement, $string); $string = nl2br($string); return $string; } 

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

Результат …

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

введите описание изображения здесь

Или просто используйте HTML-очиститель 🙂

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