HTML внутри BODY
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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> внутри сообщения
|
|
|
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') {
// Получаем все стили без тегов <style>
if (!preg_match_all('/<style>([\s\S\w\W\d\D\b.]*?)<\/style>/im', $text, $matches)) {
return $text;
}
foreach ($matches[1] as $match) {
// Удаляем лишние проблемы, комментарии и переносы строк
$match2 = trim($match);
$match2 = preg_replace('/(<!--)|(-->)|(\/\*.*\*\/)/', '', $match2);
$match2 = preg_replace('/([\s\r\n]*)\{/', ' {', $match2);
// Выбираем все селекторы
if (preg_match_all('/(.*?)\{[\r\n\s\S\w\W\d\D\b]*?\}/im', $match2, $mtc)) {
foreach ($mtc[1] as $m) {
$tmp = array();
// Разбиваем селекторы (если перечислены через запятую)
$m2 = explode(',', $m);
foreach ($m2 as $m3) {
// Добавляем уникальный ID перед каждым селектором
$tmp[] = '#'.$id.' '.$m3;
}
// Вносим изменения
$match2 = str_replace($m, implode(', ', $tmp), $match2);
}
}
$text = str_replace($match, $match2, $text);
}
return $text;
} Вот пример работы функции: Исходный текст сообщения: <meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<meta name="Generator" content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"></o:smarttagtype>
<!--[if !mso]>
<style>
st1\:* {behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--body
{background-position-x:50%;
background-position-y:0%;}
/* Font Definitions */
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman";
mso-believe-normal-left:yes;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:blue;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-reply;
font-family:Arial;
color:navy;}
@page Section1
{size:595.3pt 841.9pt;
margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.Section1
{page:Section1;}
-->
</style>
<style>
p.MsoNormal
{margin-left:56.25pt;}
</style>
<div class="Section1">
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="’font-size:" 10.0pt;font-family:arial;color:navy&rsquo;="">Сейчас мышей нет, но постараемся достать в
ближ. дни.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="’font-size:" 10.0pt;font-family:arial;color:navy&rsquo;=""><o:p>&nbsp;</o:p></span></font></p>
</div> Обработанное сообщение: <meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<meta name="Generator" content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>#AAAAA v\:* {behavior:url(#default#VML);}
#AAAAA o\:* {behavior:url(#default#VML);}
#AAAAA w\:* {behavior:url(#default#VML);}
#AAAAA .shape {behavior:url(#default#VML);}</style>
<![endif]--><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"></o:smarttagtype>
<!--[if !mso]>
<style>#AAAAA st1\:* {behavior:url(#default#ieooui) }</style>
<![endif]-->
<style>#AAAAA body {background-position-x:50%;
background-position-y:0%;}
#AAAAA @font-face {font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
#AAAAA p.MsoNormal, #AAAAA li.MsoNormal, #AAAAA div.MsoNormal {mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman";
mso-believe-normal-left:yes;}
#AAAAA a:link, #AAAAA span.MsoHyperlink {color:blue;
text-decoration:underline;}
#AAAAA a:visited, #AAAAA span.MsoHyperlinkFollowed {color:blue;
text-decoration:underline;}
#AAAAA span.EmailStyle17 {mso-style-type:personal-reply;
font-family:Arial;
color:navy;}
#AAAAA @page Section1 {size:595.3pt 841.9pt;
margin:2.0cm 42.5pt 2.0cm 3.0cm;}
#AAAAA div.Section1 {page:Section1;}
</style>
<style>#AAAAA p.MsoNormal {margin-left:56.25pt;}</style>
<div class="Section1">
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="’font-size:" 10.0pt;font-family:arial;color:navy&rsquo;="">Сейчас мышей нет, но постараемся достать в ближ. дни.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="’font-size:" 10.0pt;font-family:arial;color:navy&rsquo;=""><o:p>&nbsp;</o:p></span></font></p>
</div>
|
|
|
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>
|
|
|
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, который содержит сообщение. Или ещё что-нибудь типа того. Но пока я думал, ты сам догадался. =)
|
|
|
|
|