【问题标题】:Using DomDocument to Replace an <a> tag with Text使用 DomDocument 将 <a> 标签替换为文本
【发布时间】:2023-01-12 21:40:05
【问题描述】:

我正在寻找用一些文本替换字符串中的 &lt;a&gt; 标记。我的代码如下

$string = 'This link <a href="somedomain.com">Some Domain</a> needs to be removed';

        $domdocument = new \DOMDocument();
        $domdocument->loadHTML($string, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
        $link = $domdocument->getElementsByTagName('a')[0];

        $replacement_link = $domdocument->createTextNode("HELLO WORLD");
        $domdocument->appendChild($replacement_link);
        $domdocument->replaceChild($link, $replacement_link);
        $output = $domdocument->saveHTML();
        dd($output);

// Expected output: 'This link HELLO WORLD needs to be removed'

但是,我得到了 $string 作为输出,没有任何替换。我哪里错了?

【问题讨论】:

    标签: php dom domdocument


    【解决方案1】:

    也许是参数的顺序?

    replaceChild($newelement, $element);
    

    【讨论】:

      【解决方案2】:

      可能还有其他方法可以做到这一点,但请尝试以下操作:

      假设您的字符串嵌入在如下标签中:

      $string = '<p>This link <a href="somedomain.com">Some Domain</a> needs to be removed</p>';
      

      将您的代码更改为:

      $domdocument = new DOMDocument();
      $domdocument->loadHTML($string, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
      $link = $domdocument->getElementsByTagName('a')[0];
      
      #new part:
      $linkParent = $domdocument->getElementsByTagName('p')[0];
      $link->textContent = "HELLO WORLD";
      $linkParent->textContent = $linkParent->nodeValue;
      $output = $domdocument->saveHTML();
      echo($output);
      

      输出应该是:

      <p>This link HELLO WORLD needs to be removed</p>
      

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多