Я знаю, что много лет обсуждают лучшие методы фильтрации данных с PHP, но я хотел бы перейти в белый проект в моем текущем проекте.
Я хочу, чтобы пользователь мог использовать следующий HTML-код
<b>bold</b> <i>italics</i> <u>underline</u> <s>strikethrough</s> <big>Big size</big > <small>Small size</small> Hyperlink <a href="http://www.site.com">website</a> A Bulleted List: <ul> <li>One Item</li> <li>Another Item</li> </ul> An Ordered List: <ol> <li> First Item</li> <li> Second Item</li> </ol> <blockquote>Because it is indented</blockquote> <h1>Heading 1</h1> <h2>Heading 2</h2> <h3>Heading 3</h3>
Может ли кто-нибудь показать мне лучший способ сделать это для производительности в PHP? Я только в прошлом разрешал все html минус определенные коды
Простейшим решением будет strip_tags(),
который принимает второй аргумент, содержащий допустимые теги:
strip_tags($string, "<b><i><u><a><s><big><small><ul><li><ol><blockquote><h1><h2><h3>");
Я считаю, что библиотека очистителя HTML будет работать красиво:
HTML Purifier – это стандартная библиотека фильтров HTML, написанная на PHP. HTML-очиститель не только удалит весь вредоносный код (более известный как XSS) с тщательно проверенным, безопасным, но и разрешенным «белым списком», он также гарантирует, что ваши документы совместимы со стандартами, что только достижимо с полным знанием спецификаций W3C. Устали от использования BBCode из-за нынешнего ландшафта дефицитных или небезопасных HTML-фильтров? У вас есть редактор WYSIWYG, но он никогда не смог его использовать? Ищете высококачественные, совместимые со стандартами компоненты с открытым исходным кодом для того приложения, которое вы создаете? Очиститель HTML для вас!
Другой маршрут использует strip_tags со вторым аргументом.
Я бы выполнил представленный код в порядке, чтобы сначала его нормализовать, а затем использовать xpath или применить xslt для выбора только разрешенных элементов. Таким образом, ничто не может просачиваться. Помните также, что в любой ситуации с сайтом вы, вероятно, будете иметь тысячи, если не сотни тысяч запросов на чтение для каждого запроса на запись [который использует tidy и xpath / xslt], поэтому в среднем влияние производительности незначительно. Если вы выполняете пакетную обработку, с другой стороны.
Изменить: oh и: НЕ делать это с помощью регулярных выражений. Математически невозможно сделать это правильно.