Я хочу получить атрибуты HTML из строки с PHP, но не с:
$string = '<ul id="value" name="Bob" custom-tag="customData">'; preg_filter("/(\w[-\w]*)=\"(.*?)\"/", '$1', $string ); // returns "<ul id name custom-tag" preg_filter("/(\w[-\w]*)=\"(.*?)\"/", '$1', $string ); // returns "<ul value Bob customData"
Я хочу вернуться:
array( 'id' => 'value', 'name' => 'Bob', 'custom-tag' => 'customData' );
HTML не является обычным языком и не может быть правильно проанализирован регулярным выражением. Вместо этого используйте парсер DOM. Вот решение, использующее встроенный класс DOMDocument
:
$string = '<ul id="value" name="Bob" custom-tag="customData">'; $dom = new DOMDocument(); $dom->loadHTML($string); $result = array(); $ul = $dom->getElementsByTagName('ul')->item(0); if ($ul->hasAttributes()) { foreach ($ul->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $result[$name] = $value; } } print_r($result);
Вывод:
Array ( [id] => value [name] => Bob [custom-tag] => customData )
Не использовать регулярные выражения для анализа HTML
$string = '<ul id="value" name="Bob" custom-tag="customData">'; $dom = new DOMDocument(); @$dom->loadHTML($string); $ul = $dom->getElementsByTagName('ul')->item(0); echo $ul->getAttribute("id"); echo $ul->getAttribute("name"); echo $ul->getAttribute("custom-tag");