Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

HTML внутри BODY

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> HTML внутри BODY
Имя
Сообщение << Старые топики   Новые топики >>
HTML внутри BODY - 2011-03-24 15:40:29.946666   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
Добрый день!

Есть такая проблема. На сайте нужно выводить сообщения, написанные пользователями на почтовый ящик.
Проблема в том, что тело сообщений - это html-код.
Еще большая проблема в том, что вырезать html-теги нельзя, так как нужно сохранять форматирование и оригинальный вид сообщения (со всеми стилями и прочее).

В итоге, стили сообщений ложатся поверх стилей сайта.

Есть ли какой-нибудь тэг или хоть что-то, чтобы изолировать текст сообщений от сайта? Чтобы стили сообщений не применялись к элементам сайта.


Пример!
Юзер в Outlook написал письмо 24 шрифтом. Outlook автоматом прописал стиль p {font-size: 24px;}
При отображении этого сообщения на сайте все <p> приняли этот стиль. Мне же нужно, чтобы этот стиль применялся только к <p> внутри сообщения

Post #: 1
RE: HTML внутри BODY - 2011-03-24 18:33:46.876666   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
Нашел решение

Каждое сообщение я заключая в div с уникальным ID
Потом с помощью регулярных выражений перед всеми стилями я добавляю #УникальныйID

функция:
function getMessageText ($text = '', $id = 'MSG_TEXT') { &nbsp;&nbsp; &nbsp;// Получаем все стили без тегов &lt;style&gt; &nbsp;&nbsp; &nbsp;if (!preg_match_all('/&lt;style&gt;([\s\S\w\W\d\D\b.]*?)&lt;\/style&gt;/im', $text, $matches)) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return $text; &nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;foreach ($matches[1] as $match) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Удаляем лишние проблемы, комментарии и переносы строк &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$match2 = trim($match); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$match2 = preg_replace('/(&lt;!--)|(--&gt;)|(\/\*.*\*\/)/', '', $match2); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$match2 = preg_replace('/([\s\r\n]*)\{/', ' {', $match2); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Выбираем все селекторы &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (preg_match_all('/(.*?)\{[\r\n\s\S\w\W\d\D\b]*?\}/im', $match2, $mtc)) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;foreach ($mtc[1] as $m) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$tmp = array(); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Разбиваем селекторы (если перечислены через запятую) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$m2 = explode(',', $m); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;foreach ($m2 as $m3) { &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Добавляем уникальный ID перед каждым селектором &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$tmp[] = '#'.$id.' '.$m3; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Вносим изменения &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$match2 = str_replace($m, implode(', ', $tmp), $match2); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$text = str_replace($match, $match2, $text); &nbsp;&nbsp; &nbsp;} &nbsp;&nbsp; &nbsp;return $text; }

Вот пример работы функции:

Исходный текст сообщения:
&lt;meta http-equiv="Content-Type" content="text/html; charset=koi8-r"&gt; &lt;meta name="Generator" content="Microsoft Word 11 (filtered medium)"&gt; &lt;!--[if !mso]&gt; &lt;style&gt; v\:*&nbsp; {behavior:url(#default#VML);} o\:*&nbsp; {behavior:url(#default#VML);} w\:*&nbsp; {behavior:url(#default#VML);} .shape&nbsp; {behavior:url(#default#VML);} &lt;/style&gt; &lt;![endif]--&gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"&gt;&lt;/o:smarttagtype&gt; &lt;!--[if !mso]&gt; &lt;style&gt; st1\:* {behavior:url(#default#ieooui) } &lt;/style&gt; &lt;![endif]--&gt; &lt;style&gt; &lt;!--body &nbsp;&nbsp; &nbsp; {background-position-x:50%; &nbsp;&nbsp; &nbsp;background-position-y:0%;} &nbsp;/* Font Definitions */ &nbsp;@font-face &nbsp;&nbsp; &nbsp; {font-family:Tahoma; &nbsp;&nbsp; &nbsp;panose-1:2 11 6 4 3 5 4 4 2 4;} &nbsp;/* Style Definitions */ &nbsp;p.MsoNormal, li.MsoNormal, div.MsoNormal &nbsp;&nbsp; &nbsp; {mso-margin-top-alt:auto; &nbsp;&nbsp; &nbsp;margin-right:0cm; &nbsp;&nbsp; &nbsp;mso-margin-bottom-alt:auto; &nbsp;&nbsp; &nbsp;margin-left:0cm; &nbsp;&nbsp; &nbsp;font-size:12.0pt; &nbsp;&nbsp; &nbsp;font-family:"Times New Roman"; &nbsp;&nbsp; &nbsp;mso-believe-normal-left:yes;} a:link, span.MsoHyperlink &nbsp;&nbsp; &nbsp; {color:blue; &nbsp;&nbsp; &nbsp;text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed &nbsp;&nbsp; &nbsp; {color:blue; &nbsp;&nbsp; &nbsp;text-decoration:underline;} span.EmailStyle17 &nbsp;&nbsp; &nbsp; {mso-style-type:personal-reply; &nbsp;&nbsp; &nbsp;font-family:Arial; &nbsp;&nbsp; &nbsp;color:navy;} @page Section1 &nbsp;&nbsp; &nbsp; {size:595.3pt 841.9pt; &nbsp;&nbsp; &nbsp;margin:2.0cm 42.5pt 2.0cm 3.0cm;} div.Section1 &nbsp;&nbsp; &nbsp; {page:Section1;} --&gt; &lt;/style&gt; &lt;style&gt; p.MsoNormal &nbsp;&nbsp; &nbsp; {margin-left:56.25pt;} &lt;/style&gt; &lt;div class="Section1"&gt; &lt;p class="MsoNormal"&gt;&lt;font size="2" color="navy" face="Arial"&gt;&lt;span style="’font-size:" 10.0pt;font-family:arial;color:navy&amp;rsquo;=""&gt;Сейчас мышей нет, но постараемся достать в ближ. дни.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;font size="2" color="navy" face="Arial"&gt;&lt;span style="’font-size:" 10.0pt;font-family:arial;color:navy&amp;rsquo;=""&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;

Обработанное сообщение:
&lt;meta http-equiv="Content-Type" content="text/html; charset=koi8-r"&gt; &lt;meta name="Generator" content="Microsoft Word 11 (filtered medium)"&gt; &lt;!--[if !mso]&gt; &lt;style&gt;#AAAAA v\:* {behavior:url(#default#VML);} #AAAAA o\:* {behavior:url(#default#VML);} #AAAAA w\:* {behavior:url(#default#VML);} #AAAAA .shape {behavior:url(#default#VML);}&lt;/style&gt; &lt;![endif]--&gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"&gt;&lt;/o:smarttagtype&gt; &lt;!--[if !mso]&gt; &lt;style&gt;#AAAAA st1\:* {behavior:url(#default#ieooui) }&lt;/style&gt; &lt;![endif]--&gt; &lt;style&gt;#AAAAA body {background-position-x:50%; &nbsp;&nbsp; &nbsp;background-position-y:0%;} #AAAAA&nbsp; @font-face {font-family:Tahoma; &nbsp;&nbsp; &nbsp;panose-1:2 11 6 4 3 5 4 4 2 4;} #AAAAA&nbsp; p.MsoNormal, #AAAAA&nbsp; li.MsoNormal, #AAAAA&nbsp; div.MsoNormal {mso-margin-top-alt:auto; &nbsp;&nbsp; &nbsp;margin-right:0cm; &nbsp;&nbsp; &nbsp;mso-margin-bottom-alt:auto; &nbsp;&nbsp; &nbsp;margin-left:0cm; &nbsp;&nbsp; &nbsp;font-size:12.0pt; &nbsp;&nbsp; &nbsp;font-family:"Times New Roman"; &nbsp;&nbsp; &nbsp;mso-believe-normal-left:yes;} #AAAAA a:link, #AAAAA&nbsp; span.MsoHyperlink {color:blue; &nbsp;&nbsp; &nbsp;text-decoration:underline;} #AAAAA a:visited, #AAAAA&nbsp; span.MsoHyperlinkFollowed {color:blue; &nbsp;&nbsp; &nbsp;text-decoration:underline;} #AAAAA span.EmailStyle17 {mso-style-type:personal-reply; &nbsp;&nbsp; &nbsp;font-family:Arial; &nbsp;&nbsp; &nbsp;color:navy;} #AAAAA @page Section1 {size:595.3pt 841.9pt; &nbsp;&nbsp; &nbsp;margin:2.0cm 42.5pt 2.0cm 3.0cm;} #AAAAA div.Section1 {page:Section1;} &lt;/style&gt; &lt;style&gt;#AAAAA p.MsoNormal {margin-left:56.25pt;}&lt;/style&gt; &lt;div class="Section1"&gt; &lt;p class="MsoNormal"&gt;&lt;font size="2" color="navy" face="Arial"&gt;&lt;span style="’font-size:" 10.0pt;font-family:arial;color:navy&amp;rsquo;=""&gt;Сейчас мышей нет, но постараемся достать в ближ. дни.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;font size="2" color="navy" face="Arial"&gt;&lt;span style="’font-size:" 10.0pt;font-family:arial;color:navy&amp;rsquo;=""&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;
Post #: 2
RE: HTML внутри BODY - 2011-03-25 03:40:27.990000   
Agent Smith

Сообщений: 976
Оценки: 0
Присоединился: 2007-04-10 21:56:49.593333
Вам нужно прописывать стиль в каждом теге
<p style="font-sieze:12px; font-family:arial;">hello world</p>
<p style="font-sieze:12px; font-family:arial;">it's second row</p>
Post #: 3
RE: HTML внутри BODY - 2011-03-25 13:47:05.440000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25

quote:

ORIGINAL: ZneP

Нашел решение

Каждое сообщение я заключая в div с уникальным ID
Потом с помощью регулярных выражений перед всеми стилями я добавляю #УникальныйID

Я хотел предложить подобный вариант, но потом задумался как бы так обойтись без тега style… Ну типа воткнуть все эти объявления стилей в div, который содержит сообщение. Или ещё что-нибудь типа того. Но пока я думал, ты сам догадался. =)
Post #: 4
Страниц:  [1]
Все форумы >> [Веб-программинг] >> HTML внутри BODY







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.