如何使用查找和编辑HTML代码中的链接


How find and edit links in a HTML code with?

我想通过以下方法查找和编辑HTML代码中的链接:

  1. 查找链接
  2. 选择原始URL
  3. 在href中替换

我可以通过PHP Simple HTML DOM Parser获得这些代码,但我不能编辑链接。

我测试了这个PHP简单HTML DOM解析器,但它不起作用:

foreach($html->find('a') as $mylink){
preg_match('/q=(.+)&sa=/U', $mylink, $mylink_3);
$mylink->href = $mylink_3;
}

我的原始来源是:

<div>
<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/&amp;sa=U&amp;ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="/url?q=https://www.php.net/&amp;sa=U&amp;ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNFekxb7S2RFF0wizEyO0Swem8s0-w"><b>PHP: Hypertext Preprocessor</b></a></h3>
</div>

我想要这样的最终代码:

<div>
<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="https://www.php.net/"><b>PHP: Hypertext Preprocessor</b></a></h3>
</div>

我试了很多,我测试了每一个可以使用的函数,但都不起作用。

$dom_document = new DOMDocument();      
$dom_document->loadHTML($your_html);
$dom_xpath = new DOMXpath($dom_document);
$hrefs = $dom_xpath->query('//a/child::getAttribute(''href'')');
foreach ($hrefs as $href)
{
    $href->data = 'new_href';
}

或//a/@href

看起来你想在一个符号后缩短链接。这应该实现:

    $input = '<div>
<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/&amp;sa=U&amp;ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="/url?q=https://www.php.net/&amp;sa=U&amp;ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNFekxb7S2RFF0wizEyO0Swem8s0-w"><b>PHP: Hypertext Preprocessor</b></a></h3>
</div>';
    $doc = new DOMDocument();
    $doc->loadHTML($input);
    $links = $doc->getElementsByTagName('a');
    foreach ($links as $link) {
        $link->setAttribute('href', preg_replace('~&.*~', '', $link->getAttribute('href')));
    }
    echo $doc->saveHTML();

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>
<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="/url?q=https://www.php.net/"><b>PHP: Hypertext Preprocessor</b></a></h3>
</div></body></html>

正则表达式表示查找&,然后查找其他所有内容。然后什么都不换。~是表示正则表达式起始和结束位置的分隔符。.是任何字符,而*是零次或多次出现。