Удалить `= \ n` из HTML - PullRequest
       100

Удалить `= \ n` из HTML

0 голосов
/ 25 марта 2012

У меня есть плагин RoundCube, который записывает тело сообщения в базу данных, и после этого мне нужно проанализировать данные в другую таблицу.Используя определенные функции в RoundCube, я могу удалить все HTML-теги, и </td> заменяется на \ n, а </tr> заменяется на \ n \ n.Это делает анализ моих данных очень простым и надежным.Есть только один недостаток: html-данные разбиты на строки исправлений с = в конце, например:

<td valign=3D"bottom" style=3D"color:#444444;padding:5px 10px 5=
px 0px;font-size:12px;border-bottom:1px solid #eeeeee;"><b>Discount</b></td=
><td valign=3D"bottom" align=3D"right" style=3D"color:#444444;padding:5px 0=
px 5px 0px;font-size:12px;border-bottom:1px solid #eeeeee;text-align:right;=
"><b>Price after discount</b></td>

Теперь </td= не распознаются и поэтому Скидка присоединяется к Цена после скидки следующим образом Цена со скидкой после скидки \ n вместо Скидка \ n Цена послескидка \ п.Это весь код и действительно вызывает у меня серьезные проблемы.

Я пытался удалить = и порвать с такими вещами, как:

$msg_body = str_replace('=', '', $msg_body);
$msg_body = str_replace('=\n', '', $msg_body);
$msg_body = str_replace('= ', '', $msg_body);

, но безуспешно.Я не знаю, какой тип разрыва идет после знака =, будь то разрыв строки или абзаца, и попытался выяснить, но тщетно даже посмотрел код RoundCube.Вывод html мне тоже ничего не показал.

Я выкладываю это здесь как общий вопрос php и html в надежде, что кто-то может помочь мне просто удалить эти = знак и загадочный (для меня)) разрывается так, что

</td=
>

становится

</td>

и т. д.

Ответы [ 3 ]

4 голосов
/ 25 марта 2012

Обозначение =XY является частью (oldschool, но все еще используется!) Кодируемой для печати кодировки, которая представляет 8-битную строку ASCII в 7-битном кодировке ASC.Все символы, которые> 127, закодированы в форме =F3, которая является шестнадцатеричным представлением символа.

Например, в ваших HTML-тегах = кодируется как =3D, если вы посмотрите на него поближе.

Подробнее на Википедия о цитируемой печати

Чтобы декодировать сообщение обратно в обычный HTML, необходимо применить quoted_printable_decode() к строке.

$msg_body = quoted_printable_decode($msg_body);
0 голосов
/ 25 марта 2012

Для правильного включения экранированных символов необходимо использовать двойные кавычки (") в PHP:

$msg_body = str_replace("=\n", '', $msg_body);

В противном случае PHP будет искать строку =\n.

0 голосов
/ 25 марта 2012

в зависимости от системы, которую вы используете, новый разрыв строки может быть:

\n
\r
\r\n

Так что проверьте и те из них

Вы также можете использовать регулярное выражение, если вы знаете, что тамэто только выбранный номер разметки, в которой есть проблема:

$msg_body = preg_replace('/(\w+)=[\s\r\n]*/', '$1', $msg_body);

В вашем случае следует преобразовать </td= ...> в <td>

...