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

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')、完全に有効で、2 つのプロパティが含まれておりbackground-imagelist-style-imageテキストの途中にセミコロンまたは 4 つのコロンがあるため、ほとんどのテキスト処理は失敗します (どちらも、4 つのプロパティを示す貧弱なソリューションでは誤解されます)。

一般に、ソース コード内のテキスト操作ツールをいじろうとしないでください。CSS、HTML、その他のソースコードではありません。言語は設計上、それよりも複雑です。これは、パーサーが達成することを意図したものであり、パーサーが BIG である理由と同じです - または少なくとも strpos() よりも複雑です...

于 2013-03-28T15:12:48.450 に答える
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 に答える
0

現在の出力で使用explodeし、爆発から受け取った最初の要素を使用して続行します

于 2013-03-28T14:42:30.530 に答える