0

以下 HTML/CSS 来自 Hotmail 发送的 HTML 电子邮件...

<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style>

我只是想从内部样式元素中获取 CSS。有些可能包含 HTML 注释,例如上面的注释或 CDATA。出于某种奇怪的原因,PHP 为上面的字符串返回了下面的 CDATA 的误报...

 if (stristr($b,'<style'))
 {
  $s = explode('<style',$b,2)[1];
  $s = explode('>',$s,2)[1];

  if (stristr($s,'<![CDATA['))
  {
   $s = explode('<![CDATA[',$s,2)[1];
   $s = explode(']]',$s,2)[0];
  }
  else if (stristr($s,'<!--'))
  {
   $s = explode('<!--',$s,2)[1];
   $s = explode('-->',$s,2)[0];
  }
  else
  {
   $s = explode('</style>',$s,2)[0];
  }
4

1 回答 1

2

为什么不直接使用DOMDocument呢?

$html = "
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style>";


$dom = new DOMDocument();
$dom->loadHTML($html);
$style = $dom->getElementsByTagName('style');

// get the content from first style tag
$css = $style->item(0)->nodeValue;
// clear the comments and cdata tags
$css = str_replace(array('<!--', '-->', '<![CDATA[', ']]>', '//<![CDATA[', '//]]>'), '', $css);
echo $css;
于 2013-07-22T00:43:00.440 回答