PHP 转换HTML 为节点数组

rock001

在Web开发中,HTML文档的结构和内容往往需要通过编程方式进行操作和解析。PHP DOMDocument类是一个强大的工具,可以将HTML转换为可操作的对象结构,本文将介绍一下使用PHP的DOMDocument类将HTML转换为节点数组的过程。htmlToNodes函数将HTML字符串作为输入,并返回一个包含HTML文档结构的嵌套数组。通过这个函数,可以便捷地处理HTML内容,无论是进行网页爬虫、内容管理还是构建复杂的Web应用程序,都能大大提高开发效率和灵活性。

function htmlToNodes($html) {

	$html = "<body><div>".$html."</div></body>";

    $dom = new DOMDocument();
	libxml_use_internal_errors(true); // 禁用错误报告
    @$dom->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
	 libxml_clear_errors(); // 清除错误

	$nodes = [];


	function parseNode($node) {
		global $nodes;
		
		$item = [
			'name' => $node->nodeName,
		];
		if ($node->hasAttributes()) {
			$attrs = [];
			foreach ($node->attributes as $attr) {
				$attrs[$attr->nodeName] = $attr->nodeValue;
			}
			$item['attrs'] = $attrs;
		}
		
		if ($node->hasChildNodes()) {
			$children = [];
			foreach ($node->childNodes as $child) {
				if ($child->nodeType === XML_TEXT_NODE) {
					$children[] = [
						'type' => 'text',
						'text' => $child->wholeText,
					];
				} else {
					$children[] = parseNode($child);
				}
			}
			$item['children'] = $children;
		}
		
		return $item;
	}

	foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
		$nodes[] = parseNode($child);
	}
	return $nodes;

}

通过将HTML转换为节点数组,可以轻松地遍历这些内容,对其进行定制化的渲染和处理。

比如用于uni-app的rich-text渲染。

个赞