为了账号安全,请及时绑定邮箱和手机立即绑定

PHP DOMDocument 提取元素并创建新文档

PHP DOMDocument 提取元素并创建新文档

PHP
沧海一幻觉 2021-12-24 15:44:24
HTML:<head>    <link rel="preload" href="/_next/list.js" as="script">    <!-- ... other link elemens -->    <style data-styled="" data-styled-version="4.2.0"></style></head>任务:从 head 中提取所有链接和样式标签,并使用主机路径更新 href 属性。创建新的 html 字符串元素(一段 html),我们可以在我们的主 html 模板中输出它。PHP:$dom = new DOMDocument();$dom->loadHTML($stringBody);$xpath = new DOMXPath($dom);$headItems = $xpath->query("//head/link[@rel='preload' or @rel='stylesheet'] | //head/style");// now I want to create html string with updated attributes, but I'm lost here..$head = new DOMDocument();foreach ($headItems as $headNode) {    $headNode->setAttribute('href', $host . $headNode->getAttribute('href'));}$links = $head->saveHTML($headNode);echo $links; // echo html link tags
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

试试这个:


<?php


$host = 'example.com';


$stringBody = '<head>

    <link rel="preload" href="/_next/list.js" as="script">

    <!-- ... other link elemens -->

    <style data-styled="" data-styled-version="4.2.0"></style>

</head>';


$dom = new DOMDocument();

$dom->loadHTML($stringBody);

$xpath = new DOMXPath($dom);

$headItems = $xpath->query("//head/link[@rel='preload' or @rel='stylesheet'] | //head/style");


$links = [];


foreach ($headItems as $headNode) {

    if ($headNode->hasAttribute('href')) {

        $headNode->setAttribute('href', $host . $headNode->getAttribute('href'));

    }

    $links[] = $headNode->ownerDocument->saveHTML($headNode);

}


print_r($links);

输出


Array

(

    [0] => <link rel="preload" href="example.com/_next/list.js" as="script">

    [1] => <style data-styled="" data-styled-version="4.2.0"></style>

)



查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信