1

I'm currently using this HTML DOM PARSER using php : http://simplehtmldom.sourceforge.net/

I'm confused on how to remove and replace the selected attribute href="style.css", I want to replace the link with "index/style.css", should I insert only the

index/

or replace the whole attribute from the whole html code?

3
  • why not use the native PHP DOM parser? Commented Jan 5, 2011 at 5:49
  • what do you mean native PHP DOM PARSER? Commented Jan 5, 2011 at 6:05
  • 1
    @dqhendricks The PHP DOM library offers quite a rough feature set. There're many basic features that you need to code yourself. Third-party libraries are a good option if they're solid enough. Commented Jan 5, 2011 at 10:34

3 Answers 3

12

This should do it:

$doc = str_get_html($code);
foreach ($doc->find('a[href]') as $a) {
    $href = $a->href;
    if (/* $href begins with a relative URL path */) {
        $a->href = 'index/'.$href;
    }

}
$code = (string) $doc;

You could also use PHP’s native DOM library:

$doc = new DOMDocument();
$doc->loadHTML($code);
$xpath = new DOMXpath($doc);
foreach ($xpath->query('//a[@href]') as $a) {
    $href = $a->getAttribute('href');
    if (/* $href begins with a relative URL path */) {
        $a->setAttribute('href', 'index/'.$href);
    }
}
$code = $doc->saveHTML();
Sign up to request clarification or add additional context in comments.

Comments

1

The official manual has several examples that basically cover all you need:

http://simplehtmldom.sourceforge.net/manual.htm

If you have issues with some specific step, feel free to update your question and provide some of your code.

Comments

0
$html = str_get_html($string); 
if ($html){ // Verify connection, return False if could not load the resource
    $e = $html->find("a");
    foreach ($e as $e_element){
        $old_href = $e_element->outertext;
        // Do your modification in here 
        $e_element->href = affiliate($e_element->href); // for example I replace original link by the return of custom function named 'affiliate'
        $e_element->href = ""; //remove href
        $e_element->target .= "_blank"; // I added target _blank to open in new tab
        // end modification 
        $html = str_replace($old_href, $e_element->outertext, $html); // Update the href
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.