2012-03-25 5 views
0

У меня есть плагин RoundCube, который записывает тело сообщения в базу данных, и после этого мне нужно проанализировать данные в другой таблице. Используя определенные функции в RoundCube, я могу удалить все теги html, а </td> заменяется на «\ n», а </tr> заменяется на «\ n \ n». Это делает анализ моих данных очень простым и надежным. Существует только один недостаток, данные HTML разбиваются на починки линии с = в конце, например:Удалить `= 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= «s не получает признания и поэтому Discount соединены Цена после скидки следующим образом Discount Цена после скидки \ n, вместо Скидка \ 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> 

и т.д.

+1

поиск 'decode quoted-printable', который вы пытаетесь сделать. это больше, чем просто удаление равных знаков и новых строк. – dldnh

+0

если вы str_replace ('=', '', $ msg_body); перед str_replace ('= \ n', '', $ msg_body); обычно нет больше = \ n для обнаружения ... – Kharaone

+0

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

ответ

-1

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

\n 
\r 
\r\n 

Так проверить для тех из них слишком

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

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

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

0

За то, что экранированные символы должным образом включены, вы должны использовать двойные кавычки (") в PHP:

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

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

4

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

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

Подробнее на Wikipedia on quoted-printable

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

$msg_body = quoted_printable_decode($msg_body); 
+0

Эта единственная строка кода решила все мои страдания с этим !! Благодарим за это, я полагаю, что большинство читателей электронной почты правильно прочитали письмо, которое они все еще использовали, потому что их веб-сайт использует новейшие технологии. –

+0

@JohanMarais тот правый. пожалуйста. пожалуйста, примите это как правильный ответ, если он вам поможет. Благодарю. http://stackoverflow.com/faq#howtoask – Kaii

Смежные вопросы