Search code examples
phpparsingsimple-html-dom

Using SimpleHtmlDom, how to remove and replace a specific attribute


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?


Solution

  • 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();