[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Получить текстовую версию письма из HTML с таблица
ded-mazay
Доброго времени!
Собсно допустим есть HTML оформленное тело письма с таблицами (<table />), нужно чтобы письмо соответствовало более-менее стандартам - добавить текстовую версию этого письма, получив его из имеющегося HTML. Вырезал все переводы строк, абзацы, оформление блоков и т.п., преобразовал ссылки.
Таблицы я так думаю придется грохнуть целиком..?
Подскажите пож. наиболее элегантный способ вырезать их из тела..
walerus
А зачем их вырезать? может преобразовать так же в текст, разделяя табуляцией(пробелами/вертикальными "палочками" || нужное подчеркнуть), вроде "добавить текстовую версию этого письма" нужно, а не вырезать таблицы. Вырезать можно регулярками.
ded-mazay
Цитата (walerus @ 11.10.2019 - 11:18)
может преобразовать так же в текст, разделяя табуляцией(пробелами/вертикальными "палочками" || нужное подчеркнуть), вроде "добавить текстовую версию этого письма" нужно, а не вырезать таблицы. Вырезать можно регулярками.

Таблицы большие и как их не преобразовывай получится набор бреда, а не внятный текст. Хочю вместо них вставить что-то вроде Please switch to view in HTML mode..
Вот так нормально работать будет?:
$plain_text = preg_replace('/(?s)<table.*?<\/table>/', "Please switch to view HTML mode", $plain_text);
walerus
ded-mazay
Цитата
Вот так нормально работать будет?:

Возможно, если таблица в одну строку, а если переносы?... скорее всего понадобятся модификаторы ( i U s u ).
ded-mazay
Я в регулярках не очень, поэт. сюда написал.. (
Попутно вопрос: в заголовках не надо тему передавать получается, т.к. если я передаю тему письма ф-ции mail, и добавляю к этому заголовок с темой, то получаю такую картинку в исходнике полученного письма:
Subject: =?utf-8?B?0J7RgtGH0LXRgiDQv9C+INGC0LXQutGD0YnQuNC8INGA0LXQvNC+0L3RgtCw0Lwu?=
...
Subject: =?utf-8?B?0J7RgtGH0LXRgiDQv9C+INGC0LXQutGD0YnQuNC8INGA0LXQvNC+0L3RgtCw0Lwu?=

Если передавать только в заголовках - такую:
Subject: 
...
Subject: =?utf-8?B?0J7RgtGH0LXRgiDQv9C+INGC0LXQutGD0YnQuNC8INGA0LXQvNC+0L3RgtCw0Lwu?=
ded-mazay
окей,
$plain_text = preg_replace('/(?s)<table.*?<\/table>/', "Please switch view as HTML mode for display this content", $plain_text);

работает как надо, с любым количеством переводов строки

про тему тоже вопрос решен - он в хедерсах не нужен. Возможно в древних версиях работало по другому, испытано на >= 5.3
walerus
Пример:
тыц
<?php
$content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Тег TABLE</title>
</head>
<body>
<table border="1" width="100%" cellpadding="5">
<tr>
<th>Ячейка 1</th>
<th>Ячейка 2</th>
</tr>
<tr>
<td>Ячейка 3</td>
<td>Ячейка 4</td>
</tr>
</table>

тут какой нить текст

<table border="1" width="100%" cellpadding="5">
<tr>
<th>Ячейка 1</th>
<th>Ячейка 2</th>
</tr>
<tr>
<td>Ячейка 3</td>
<td>Ячейка 4</td>
</tr>
</table>
</body>
</html>'
;

$content = preg_replace('~<table.*?<\/table>~s','', $content);

echo $content;


Результат:
Тыц
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML  4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Тег TABLE</title>
</head>
<body>



тут какой нить текст


</body>
</html>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.