2013-03-28 54 views
0

我有一個HTML字符串如何獲得使用PHP的DOMDocument

$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

你不想要鍵而不是值,因爲這些會在這兩種情況下都是「風格」。如果我猜對了,你需要CSS值的屬性名稱。您希望如何處理設置了多個屬性的情況,例如

text
? –

回答

0

您當前使用的輸出和explode然後繼續使用您從收到的第一個元素爆炸

+0

謝謝。我忘了使用它.. – Munib

+0

發生在每個人;) – kero

+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參數

+0

這非常適合。 – Munib

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,也不適用於其他源代碼。語言在設計上比這更復雜。這就是語法分析器所要達到的目的,這也是它們爲什麼BIG的原因 - 或者至少比strpos()更復雜的原因...

+0

但是並不是所有的CSS代碼都像'x:y;'一樣構建? – kero

+0

是的,就像示例代碼一樣。問題在於,您所稱的「y」也可能包含使您的建議無法使用的冒號和分號。您將首先用分號分解它,產生4個部分,雖然有2個合法部分。可能構建更復雜的示例來證明大多數基本爆炸解決方案是錯誤的。我的觀點不是要展示一個反駁所有簡單文本處理嘗試的例子,而是要喚起你的注意力,甚至不要去思考這些怪癖。把它留給專門的軟件,一個解析器;或者你的代碼最終會中斷。 –

相關問題