I'm trying to find all href links on a webpage and replace the link with my own proxy link.
For example
<a href="http://www.google.com">Google</a>
Needs to be
<a href="http://www.example.com/?loadpage=http://www.google.com">Google</a>
I'm trying to find all href links on a webpage and replace the link with my own proxy link.
For example
<a href="http://www.google.com">Google</a>
Needs to be
<a href="http://www.example.com/?loadpage=http://www.google.com">Google</a>
Use PHP's DomDocument
to parse the page
$doc = new DOMDocument();
// load the string into the DOM (this is your page's HTML), see below for more info
$doc->loadHTML('<a href="http://www.google.com">Google</a>');
//Loop through each <a> tag in the dom and change the href property
foreach($doc->getElementsByTagName('a') as $anchor) {
$link = $anchor->getAttribute('href');
$link = 'http://www.example.com/?loadpage='.urlencode($link);
$anchor->setAttribute('href', $link);
}
echo $doc->saveHTML();
Check it out here: http://codepad.org/9enqx3Rv
If you don't have the HTML as a string, you may use cUrl (docs) to grab the HTML, or you can use the loadHTMLFile
method of DomDocument
Documentation
DomDocument
- http://php.net/manual/en/class.domdocument.phpDomElement
- http://www.php.net/manual/en/class.domelement.phpDomElement::getAttribute
- http://www.php.net/manual/en/domelement.getattribute.phpDOMElement::setAttribute
- http://www.php.net/manual/en/domelement.setattribute.phpurlencode
- http://php.net/manual/en/function.urlencode.phpDomDocument::loadHTMLFile
- http://www.php.net/manual/en/domdocument.loadhtmlfile.phpJust another option if you would like to have the links replaced with by jQuery you could also do the following:
$(document).find('a').each(function(key, element){
curValue = element.attr('href');
element.attr('href', 'http://www.example.com?loadpage='+curValue);
});
However a more secure way is doing it in php offcourse.
Simplest way I can think to do this:
$loader = "http://www.example.com?loadpage=";
$page_contents = str_ireplace(array('href="', "href='"), array('href="'.$loader, "href='".$loader), $page_contents);
But that might have some problems with urls containing ? or &. Or if the text (not code) of the document contains href="