我有一个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
我怎样才能获得这些键而不是他们拥有的值?
答案 0 :(得分: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参数
答案 1 :(得分: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-image
和list-style-image
,大多数文本处理都会失败,因为文本中间有分号或4个冒号(两者都会被错误指示4个属性的不良解决方案。)
一般来说,永远不要尝试在源代码中摆弄文本操作工具;不是CSS,也不是HTML,也不是其他任何源代码。语言设计比这更复杂。这就是解析器要完成的目标,这也就是为什么它们很大 - 或者至少比strpos()更复杂......
答案 2 :(得分:0)
在当前输出上使用explode
,然后继续使用从爆炸中收到的第一个元素