我想通过这种方法在HTML代码中查找和编辑链接:
我可以通过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/&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>
我已经尝试了很多,并且我测试了所有可以使用的功能,但这不起作用。
答案 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/&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>
正则表达式说找到&
然后找到其他所有内容。然后用零替换它。 ~
是分隔符,表示正则表达式的开始和结束位置。 .
是任何字符,*
出现零次或多次。