【问题标题】:Change 'href' value of a link using PHP and DOM使用 PHP 和 DOM 更改链接的“href”值
【发布时间】:2018-10-21 19:34:55
【问题描述】:

我想将 HTML 变量中的所有链接更改为随机链接。这是我的代码,但有些东西阻止了链接被更改:

<?php
$jobTemplateDetails = '<a href="https://www2.google.com">Click!</a>
<a href="https://www3.google.com">Click!</a>';
////////////////////// CHANGE ALL LINKS
$linkDom = new DOMDocument;

@$linkDom->loadHTML($jobTemplateDetails);

$allLinks = $linkDom->getElementsByTagName('a');

foreach ($allLinks as $rawLink) {

    $longLink = $rawLink->getAttribute('href');
        $str = 'abcdefghijklmnopqrstuvwxyz';
        $randomChar1 = $str[mt_rand(0, strlen($str)-1)];
        $randomChar2 = $str[mt_rand(0, strlen($str)-1)];
        $randomChar3 = $str[mt_rand(0, strlen($str)-1)];
        $randomChar4 = $str[mt_rand(0, strlen($str)-1)];
        $shortURL = mt_rand(1, 9).$randomChar1.mt_rand(1, 9).$randomChar2.$randomChar3.$randomChar4;
        $rawLink->setAttribute('href', $shortURL);
}
echo $jobTemplateDetails;

【问题讨论】:

  • 您知道,当您echo $jobTemplateDetails; 时,您只显示第一个输入,而不显示您之后可能通过代码更改的内容?
  • 你应该使用echo $allLinks-&gt;saveHTML()来显示更新
  • @Jeff 谢谢!那么如何保存对变量的更改?
  • @Mohammad Dear Mohammad,它会产生如下错误:Uncaught Error: Call to undefined method DOMNodeList::saveHTML()

标签: php html dom


【解决方案1】:

当您echo $jobTemplateDetails; 时,您只显示第一个输入字符串,而不是您操作的 DomDocument。
将其更改为

echo $linkDom->saveHTML();

///OUTPUT:
<a href="7y2rpn">Click!</a>
<a href="3b5qtr">Click!</a>

小提琴:https://3v4l.org/KuCic
the docs

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2014-03-24
    • 2015-07-14
    • 2011-12-27
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2020-03-30
    • 2012-11-23
    相关资源
    最近更新 更多