Помогите реализовать теги в PHP - PullRequest
2 голосов
/ 22 августа 2011

В моем недавнем PHP-проекте мне нужно реализовать теги (доступные для поиска), разделенные запятой (аналогично этому сайту или что-то вроде WordPress).Какой умный способ обнаружить и удалить ненужные символы или теги?Если оставить в стороне проблему XSS, в первую очередь мне нужно очистить и извлечь только текст, если пользователь вводит HTML (или другие теги) вместо простого текста.

Например:

If user inputs <b>sdfasdf</b>, <a href="something">sdfsdfsdf</a>, <sdfsdfsdf
It should strip out all the unnecessary characters and tags and only plain text should be saved in database.

Я пробовал это в WordPress, и это очень разумно, чтобы выяснить, этот плюс автоматически извлекает только текст.

Мой вопрос:

Существует ли библиотека с открытым исходным кодом для этой задачи, которую я могуинтегрировать в мой проект.Я сделал несколько домашних заданий по этому поводу, но * htmlentities (), strip_tags (), HTML Purifier * и т. Д. Не подходит для этой задачи.Или мне нужно собрать свою собственную библиотеку в сочетании с этим?

Может ли кто-нибудь помочь мне в этом?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

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

Масштабирование неверного ввода в действительный, редко бывает хорошей идеей.

В тегах допускаются символы, как правило, буквенно-цифровые + тире и подчеркивание. Некоторые сайты также допускают пробелы.

0 голосов
/ 22 августа 2011

Помимо удаления «полных» тегов (элементов языка разметки), таких как в <b>sdfasdf</b>, <a href="something">sdfsdfsdf</a>, вы также можете удалить «запрещенные» символы, такие как «<», «>» и «&» (используя preg_replace и т. п.), и сверните несколько пробелов в один пробел (также используя preg_replace).Помните, что они используются только как теги (ключевые слова), поэтому здесь допустимо использовать несколько ограниченный набор символов.Например, в переполнении стека в тегах допускаются только буквы, цифры и дефисы.

...