2013-03-28 2 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-image и list-style-image, и большая часть обработки текста потерпит неудачу либо из-за того, что в середине текста находятся точки с запятой или 4 двоеточия (оба будут ошибочно приняты плохими решениями, чтобы указать 4 свойства).

Как правило, никогда не пытайтесь возиться с инструментами для обработки текста в исходном коде; не для CSS, ни для HTML, ни для любого исходного кода. Языки по дизайну более сложны. Это то, что должны выполнять парсеры, и по той же причине они являются БОЛЬШОЙ - или, по крайней мере, сложнее, чем strpos() ...

+0

Но разве не все CSS-коды строятся как 'x: y;'? – kero

+0

Да, это как пример кода. Проблема состоит в том, что то, что вы называете «y», также может содержать двоеточия и точки с запятой, которые делают ваше предложение непригодным для использования. Сначала вы взорвите его точкой с запятой, дающей 4 части, хотя есть две законные части. Возможно, более сложные примеры можно было бы построить, чтобы доказать, что большинство базовых решений на основе взрывов ошибочны. Моей целью было не показывать пример, который опровергает все простые попытки обработки текста, но обращать ваше внимание, чтобы даже не подумать о причудах. Оставьте это для специализированного программного обеспечения, анализатора; или ваш код в конечном итоге сломается. –

Смежные вопросы