我想用 PHP 从字符串中获取 HTML 属性但失败:
$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"
Run Code Online (Sandbox Code Playgroud)
我想返回的是:
array(
'id' => 'value',
'name' => 'Bob',
'custom-tag' => 'customData'
);
Run Code Online (Sandbox Code Playgroud)
$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");
Run Code Online (Sandbox Code Playgroud)
HTML 不是常规语言,无法使用正则表达式正确解析。请改用 DOM 解析器。这是使用 PHP 内置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);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[id] => value
[name] => Bob
[custom-tag] => customData
)
Run Code Online (Sandbox Code Playgroud)