Как заставить элементы / теги, такие как <i> и <b>, закрываться внутри родительского элемента?

0

Я разрешу пользователям отправлять HTML файлы, стирать теги сценария и стиля (ofc), но некоторые элементы, такие как Bold и Italic, выходят из DIVision, где входит пользовательский контент. Если они забудут закрыть их, я имею в виду.

Пример:

Пользователь отправляет:

I'm entering a <b>tunne----------------

Страница заканчивается следующим образом:

<div>
    I'm entering a <b>tunne----------------
</b><div><b> **rest of the page**

И таким образом вся остальная часть страницы становится жирной. Меня смущает поведение (почему эти вещи не остаются в их клетках?). И мне нужно аккуратное решение. Я бы хотел, чтобы там была клетка, но нет. Использование iframe для этого крайне неуместно.

Есть идеи? Я бы предпочел решить это, не написав парсер, чтобы найти закрытые теги.

Теги:

2 ответа

1

К сожалению, нет способа заставить браузер интерпретировать несбалансированные теги для вас. Возьмите этот сценарий:

<b>foo <i>bar</b> baz</i>

Если он оставит теги на месте и отобразит их как

foo bar baz

или должен ли браузер предположить, что <i> является дочерним и перемещает его закрывающий тег? Или, может быть, пользователь имел в виду, что <b> является дочерним и перемещает свой закрывающий тег?

Если вы хотите разрешить разметку пользователя и хотите избежать проблем с рендерингом, вы можете либо подсчитать общее количество открывающих/закрывающих тегов, чтобы убедиться, что они балансируют (и вычеркивают все теги, если они этого не делают), или используют более пуленепробиваемый сервис, такой как Хорен, выше.

Кроме того, это, вероятно, очень неразумно, чтобы пользователи могли отправлять HTML. Даже если вы заносили в черный список определенные теги, вероятно, осталась целая куча других эксплойтов. Гораздо лучше разрешить пользователям вводить ограничения Markdown или BBcode, а затем конвертировать символы, которые вы разрешаете в HTML.

  • 0
    Поскольку оба являются встроенными тегами, им следует разрешить чередование. Но я бы хотел, чтобы они остановились на элементе блока, окружающем их. Я бы даже согласился с наличием специального блочного элемента для их хранения.
  • 0
    Что касается того, что это неразумно, это, вероятно, правда.
Показать ещё 2 комментария
0

Вы можете использовать html sanitizer, как php tidy, который очистит и исправит ваш исходный код.
Еще одним вариантом AFAIK был бы HTML-очиститель

  • 0
    Я на самом деле не использую PHP, так что это мне не поможет. Я упомянул, что предпочел бы не писать парсер, но у меня тоже нет предпочтений. Спасибо, в любом случае!
  • 1
    К вашему сведению: Tidy - это библиотека, написанная на C на самом деле, и есть много языков программирования, которые вы можете использовать с

Ещё вопросы

Сообщество Overcoder
Наверх
Меню