ActionView :: Helpers :: SanitizeHelper завершается ошибкой с несколькими тегами <wbr> - PullRequest
0 голосов
/ 13 ноября 2018

Когда html очищается с помощью Rails ActionView :: Helpers :: SanitizeHelper, происходит сбой при наличии нескольких тегов 'wbr'.

Текст, вставленный из других приложений, содержит HTML, содержащий буквально сотни элементов 'wbr'.

Когда объединенная глубина элементов wbr и внешних элементов, в которых они появляются, достигает 255, весь следующий текст в документе представляется удаленным.

Это может означать, что важная информация потеряна.

В качестве примера, если вы запустите sanize для фрагмента ниже:

<div>
  Some text here

  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>
  <wbr><wbr><wbr><wbr><wbr>

  More important text here
</div> 

Результат не содержит второй фрагмент текста. то есть результат:

<div>
  Some text here



</div>

Я ищу способ безопасной очистки HTML-кода, вставленного из других приложений, без потери какого-либо содержимого.

Я мог бы, очевидно, заменить все элементы 'wbr' пробелами, используя gsub перед очисткой, но я хотел бы знать, что нет других сценариев, которые будут вызывать потерю данных таким же образом.

Обратите внимание, что у Rails :: Html :: TargetScrubber есть похожие проблемы: если вы попытаетесь удалить элементы 'wbr' из примера сегмента, тогда он также удалит последний текст.

...