我想通过以下方法查找和编辑HTML代码中的链接:
- 查找链接
- 选择原始URL
- 在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/&sa=U&ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="/url?q=https://www.php.net/&sa=U&ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&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/&sa=U&ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3>
</div><div>
<h3 class="r"><a href="/url?q=https://www.php.net/&sa=U&ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&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>
正则表达式表示查找&
,然后查找其他所有内容。然后什么都不换。~
是表示正则表达式起始和结束位置的分隔符。.
是任何字符,而*
是零次或多次出现。