HTMLpurifier убирает таблицы.Кто-нибудь знает почему? - PullRequest
0 голосов
/ 11 декабря 2018

Я только что загрузил очиститель HTML, чтобы очистить входные данные редактора wysigyg, но, похоже, он удаляет таблицы.

Если я введу этот текст:

<font face="Times New Roman" size="3">

</font><p style="margin: 0in 0in 0pt; line-height: 150%; mso-outline-level: 3;"><span style='color: black; line-height: 150%; font-family: "Arial","sans-serif"; font-size: 12pt; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'>Recruitment methods</span></p><font face="Times New Roman" size="3">

</font><table style="border: currentColor; border-image: none; border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt;" border="1" cellspacing="0" cellpadding="0"><font face="Times New Roman" size="3">
</font><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"><font face="Times New Roman" size="3">
 </font><td width="37" style="padding: 0in 5.4pt; border: 1pt solid windowtext; border-image: none; width: 27.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt;"><font face="Times New Roman" size="3">
 </font><p align="center" style="margin: 0in 0in 0pt; text-align: center; line-height: normal;"><span style='font-family: "Arial","sans-serif"; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'><font size="3">No.</font></span></p><font face="Times New Roman" size="3">
 </font></td><font face="Times New Roman" size="3">
 </font><td width="180" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 134.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
 </font><td width="210" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 157.5pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
 </font><td width="211" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 2.2in; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
</font></tr><font face="Times New Roman" size="3">
</font><tr style="mso-yfti-irow: 1;"><font face="Times New Roman" size="3">
 </font><td width="37" style="border-width: 0px 1pt 1pt; border-style: none solid solid; border-color: rgb(0, 0, 0) windowtext windowtext; padding: 0in 5.4pt; border-image: none; width: 27.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;"><font face="Times New Roman" size="3">
 </font><p align="center" style="margin: 0in 0in 0pt; text-align: center; line-height: normal;"><span style='font-family: "Arial","sans-serif"; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'><font size="3">1</font></span></p><font face="Times New Roman" size="3">
 </font></td><font face="Times New Roman" size="3">
 </font><td width="180" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 134.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
 </font><td width="210" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 157.5pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
 </font><td width="211" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 2.2in; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td><font face="Times New Roman" size="3">
</font></tr><font face="Times New Roman" size="3">
</font><font face="Times New Roman" size="3">
</font></tbody></table><font face="Times New Roman" size="3">

</font><p align="center" style="margin: 0in 0in 10pt; text-align: center;"><span style='line-height: 115%; font-family: "Arial","sans-serif"; font-size: 12pt; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'>&nbsp;</span></p><font face="Times New Roman" size="3">

</font><p style="margin: 0in 0in 10pt;"><font face="Times New Roman" size="3">

</font><br>

Я получу этот вывод:

    <font face="Times New Roman" size="3">

</font><p style="margin:0in 0in 0pt;line-height:150%;"><span style="color:#000000;line-height:150%;font-family:Arial, 'sans-serif';font-size:12pt;">Recruitment methods</span></p><font face="Times New Roman" size="3">

</font><font face="Times New Roman" size="3">
 </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p align="center" style="margin:0in 0in 0pt;text-align:center;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">No.</font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p align="center" style="margin:0in 0in 0pt;text-align:center;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Method</font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p align="center" style="margin:0in 0in 0pt;text-align:center;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Strengths</font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p align="center" style="margin:0in 0in 0pt;text-align:center;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Weaknesses</font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
 </font><font face="Times New Roman" size="3">
 </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p align="center" style="margin:0in 0in 0pt;text-align:center;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">1</font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><p style="margin:0in 0in 0pt;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Internal recruitment</font></span></p><font face="Times New Roman" size="3">
  </font><p style="margin:0in 0in 0pt;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Promotion</font></span></p><font face="Times New Roman" size="3">
  </font><p style="margin:0in 0in 0pt;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3">Lateral transfer</font></span></p><font face="Times New Roman" size="3">
  </font><p style="margin:0in 0in 0pt;line-height:normal;"><span style="font-family:Arial, 'sans-serif';"><font size="3"> </font></span></p><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3">
  </font><font face="Times New Roman" size="3"> etc...

Моя установка выглядит следующим образом:

require_once 'purify/library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p,span[style|class],a[href|title],abbr[title],acronym[title],b,strong,blockquote[cite],code,em,i,iframe[src|width|height],img[alt|title|class|src|height|width],h1,h2,h3,h3,ol,ul,li,table[class|style],tr,td,hr');
$purifier = new HTMLPurifier($config);

Я только добавил строку HTML.Allowed, чтобы попытаться разрешить таблицы, но это не сработало.Кто-нибудь имеет какие-либо идеи, почему он убирает таблицы, хотя это не должно быть?

Спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Это немного странно - изначально я думал, что, возможно, один из тегов <font> (встроенный элемент) окружает элемент уровня блока, таким образом, вынуждая его убрать, и ошибка затем постепенно накапливается, нопосле запуска кода через простой (тупой) форматировщик HTML, похоже, все они довольно автономны.

Но включение Error Collection показывает нам, что происходит.Проблема, похоже, заключается в том, что, несмотря на свою автономность, HTML-очиститель закрывает тег <table>, как только встречает первый <font>, он не удаляет <font> (как можно подумать):

Уведомление Строка 7, столбец 8: начата в строке 6, автоматически закрывается по

Ошибка Строка 10, столбец 8: атрибут стиля на удален

Уведомление Строка 11,Столбец 12: , начатый в строке 10, автоматически закрывается по

Уведомление Строка 11, столбец 12: запускается в строке 9 автоматически закрывается с помощью

Предупреждение Строка 31, столбец 8: Не нужно тег удален

Ошибка Строка 34, столбец 8: атрибут стиля в удален

Уведомление Строка 35, столбец 12: начато в строке 34 с автоматическим закрытием по

Предупреждение Строка 55, столбец 8: Ненужный тег удален

Предупреждение Строка 59, столбец 8: Ненужный тег удален

Предупреждение Строка 60, столбец 4: Ненужный тег удален

Уведомление Конец документа: тег начат в строке 66, закрытой в конце документа

Предупреждение Конец документа: Содержимое узла реорганизовано для обеспечения его модели содержимого

Это вывод демо , если вы выберете CollectErrors : Да и подключите следующий HTML:

<font face="Times New Roman" size="3">
</font>
<p style="margin: 0in 0in 0pt; line-height: 150%; mso-outline-level: 3;"><span style='color: black; line-height: 150%; font-family: "Arial","sans-serif"; font-size: 12pt; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'>Recruitment methods</span></p>
<font face="Times New Roman" size="3">
</font>
<table style="border: currentColor; border-image: none; border-collapse: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt;" border="1" cellspacing="0" cellpadding="0">
    <font face="Times New Roman" size="3">
    </font>
    <tbody>
    <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
        <font face="Times New Roman" size="3">
        </font>
        <td width="37" style="padding: 0in 5.4pt; border: 1pt solid windowtext; border-image: none; width: 27.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt;">
            <font face="Times New Roman" size="3">
            </font>
            <p align="center" style="margin: 0in 0in 0pt; text-align: center; line-height: normal;"><span style='font-family: "Arial","sans-serif"; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'><font size="3">No.</font></span></p>
            <font face="Times New Roman" size="3">
            </font>
        </td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="180" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 134.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="210" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 157.5pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="211" style="border-width: 1pt 1pt 1pt 0px; border-style: solid solid solid none; border-color: windowtext windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; border-image: none; width: 2.2in; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
    </tr>
    <font face="Times New Roman" size="3">
    </font>
    <tr style="mso-yfti-irow: 1;">
        <font face="Times New Roman" size="3">
        </font>
        <td width="37" style="border-width: 0px 1pt 1pt; border-style: none solid solid; border-color: rgb(0, 0, 0) windowtext windowtext; padding: 0in 5.4pt; border-image: none; width: 27.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">
            <font face="Times New Roman" size="3">
            </font>
            <p align="center" style="margin: 0in 0in 0pt; text-align: center; line-height: normal;"><span style='font-family: "Arial","sans-serif"; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'><font size="3">1</font></span></p>
            <font face="Times New Roman" size="3">
            </font>
        </td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="180" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 134.95pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="210" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 157.5pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
        <td width="211" style="border-width: 0px 1pt 1pt 0px; border-style: none solid solid none; border-color: rgb(0, 0, 0) windowtext windowtext rgb(0, 0, 0); padding: 0in 5.4pt; width: 2.2in; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt;">&nbsp;</td>
        <font face="Times New Roman" size="3">
        </font>
    </tr>
    <font face="Times New Roman" size="3">
    </font><font face="Times New Roman" size="3">
    </font>
    </tbody>
</table>
<font face="Times New Roman" size="3">
</font>
<p align="center" style="margin: 0in 0in 10pt; text-align: center;"><span style='line-height: 115%; font-family: "Arial","sans-serif"; font-size: 12pt; mso-ascii-theme-font: minor-bidi; mso-hansi-theme-font: minor-bidi; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi;'>&nbsp;</span></p>
<font face="Times New Roman" size="3">
</font>
<p style="margin: 0in 0in 10pt;"><font face="Times New Roman" size="3">
</font><br>

Есть другая ветка на форуме HTML Purifier , которая может сделать это немного более понятным.Симптомы были описаны так:

Когда я пытаюсь очистить этот код:

<table>
  <tr>
    <td>
      <li>fffff</li>
    </td>
  </tr>
</table>

Я получаю:

<table>
  <tr>
    <td>
    </td>
  </tr>
</table>

fffff

И (мойХех) Ответ тогда:

Я предполагаю, что происходит то, что очиститель HTML обнаруживает, что

нельзя открыть в этой позиции - но вместо того, чтобы сначала убрать , он автоматическив этот момент закрывает другие открытые теги, в результате чего (изначально) получается:
<table>
  <tr>
    <td>
    </td>
  </tr>
</table>
<li>fffff</li>
    </td>
  </tr>
</table>

Затем удаляются посторонние закрывающие теги ...

<table>
  <tr>
    <td>
    </td>
  </tr>
</table>
<li>fffff</li>

И затем удаляется

, в результате чегов том, что наблюдается:
<table>
  <tr>
    <td>
    </td>
  </tr>
</table>
fffff

Вы можете попробовать переключить Lexer на DirectLex и посмотреть, изменит ли это поведение, но я сомневаюсьэто - вы можете застрять с этим поведением.Дай ему вихрь.

...