0

我有一个 html 字符串

$html_string = '<div style="font-family:comic sans ms,cursive;">
<div style="font-size:200%;">Some Text </div></div>';

我试过了

$dom = new DOMDocument;
$dom->loadHTML($html_string);
$divs = $dom->getElementsByTagName('div');

for($i=0;$i<$divs->length;$i++) {
$attrib = $divs->item($i)->getAttribute("style");
echo $attrib;
echo '<br />';
}

它给出以下输出

font-family:comic sans ms,cursive
font-size:200%;

我需要

font-family
font-size

我怎样才能只得到这些键而不是它们的值?

4

3 回答 3

1

你可以使用正则表达式来做到这一点。像这样的东西:

$style = 'font-family:comic sans ms,cursive;font-size:15em';
preg_match_all('/(?<names>[a-z\-]+):(?<params>[^;]+)[; ]*/', $style, $matches);

var_dump($matches['names']);
var_dump($matches['params']);

结果:

array
  0 => string 'font-family' (length=11)
  1 => string 'font-size' (length=9)

array
  0 => string 'comic sans ms,cursive' (length=21)
  1 => string '15em' (length=4)

这甚至可以与多个 css 参数一起使用

于 2013-03-28T14:57:20.093 回答
1

使用 CSS 解析器!

explode所有带有正则表达式的答案本质上都是错误的。这是您要分析的 CSS 源代码。简单的文本操作永远不会正确地做到这一点。例如background-image:url('http://my.server.com/page?a=1;b=2'); list-style-image:url('http://my2.server.com/page/a=1;b=2'),完全有效,包含这两个属性background-imagelist-style-image并且大多数文本处理将失败,因为文本中间有分号或 4 个冒号(两者都会被错误的解决方案误认为指示 4 个属性)。

一般来说,永远不要尝试在源代码中摆弄文本操作工具;不适用于 CSS、HTML 或其他任何源代码。语言的设计比这更复杂。这就是解析器要完成的任务,这也是它们为什么大的原因——或者至少比 strpos() 更复杂......

于 2013-03-28T15:12:48.450 回答
0

explode在当前输出上使用,然后继续使用从 explode 收到的第一个元素

于 2013-03-28T14:42:30.530 回答