Лучший способ обработки смешанного HTML и ввода пользователем?

В приложении PHP, которое я пишу, я хотел бы, чтобы пользователи вводили в текст сочетание HTML и текст с заостренными скобками, но когда я показываю этот текст, я хочу, чтобы теги HTML отображались с помощью тегов, отличных от HTML быть показанными на литературе, например, пользователь должен иметь возможность вводить:

<b> 5 > 3 = true</b>

при отображении пользователь должен увидеть:

5> 3 = true

Каков наилучший способ разобрать это, т. Е. Найти все скобки без HTML, преобразовать их в & gt; и & lt;

php,parsing,

0

Ответов: 3


2 принят

Я бы рекомендовал, чтобы пользователи вводили разметку стиля BBcode, которую вы затем заменяете на теги html:

[b]This is bold[/b]
[i]this is italic with a > 'greater than' sign there[/i]

Это дает вам больше контроля над тем, как вы анализируете ввод пользователя в html, хотя я признаю, что это выглядит излишним бременем.


1

Если вы разрешаете пользователю вводить HTML-код, вам нужно решить гораздо более серьезную проблему, чем несколько невыпадающих угловых скобок; HTML действительно сложно проверить и правильно фильтровать, и если вы не сделаете это правильно, вы откроете себя для атак XSS. Я написал библиотеку, которая делает это; кто-то еще уже разместил ссылку на него здесь, поэтому я не буду повторять.

Однако, чтобы ответить на ваш вопрос, самый надежный способ преобразования скошенных угловых скобок в их экранированные формы - это разбор HTML с помощью DOM / libxml, а затем повторная инициализация. Все, что использует регулярные выражения или такие, будет обречено на неудачу по краю. Вы также можете написать свой собственный синтаксический анализатор, но это также требует немного работы.


0

Лучше всего было бы сделать наоборот: вместо того , чтобы найти не-HTML скобки и избежать их, первый побег все , а затем искать &lt;b&gt;и &lt;/b&gt;и только эти экранирования в особых случаях. Таким образом, вы не рискуете, что пользователь вводит вредоносный HTML на вашей странице (если вы пытаетесь избежать только того, что необходимо, вы рискуете потерять что-то важное).

PHP, синтаксический анализ,
Похожие вопросы