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

时间:2015-08-26 11:08:07

标签: php html

我想通过这种方法在HTML代码中查找和编辑链接:

  1. 查找链接
  2. 选择原始网址
  3. 替换in href
  4. 我可以通过PHP Simple HTML DOM Parser获取此代码,但我无法编辑链接。

    我测试了这个PHP Simple HTML DOM Parser,但它不起作用:

    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>
    

    我已经尝试了很多,并且我测试了所有可以使用的功能,但这不起作用。

2 个答案:

答案 0 :(得分:0)

$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

答案 1 :(得分:0)

看起来你想要在&符后缩短链接。这应该实现:

    $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>

正则表达式说找到&然后找到其他所有内容。然后用零替换它。 ~是分隔符,表示正则表达式的开始和结束位置。 .是任何字符,*出现零次或多次。