2

first I let the it find the element

$dom= new \DOMDocument();
$dom->loadHTML($html_string);
$only_p = $dom->getElementsByTagName('p')->item(1);

If I try something like

$only_p->textContent; /* <-- it will only return the text inside the paragraph and even remove all the tags inside of it */

what I need is something like

$only_p = $dom->getElementsByTagName('p')->item(1);
$only_p->outerHTML; 

that would return the HTML around it, like

<p class="something"><a href="link"> this is text </a></p>

instead of just the string "this is text"

1
  • You can try $only_p->ownerDocument->saveXML($only_p); Commented Aug 14, 2015 at 10:36

1 Answer 1

1

This is how I solved it

/**
 * Returns the outer HTML of a certain tag.
 * You can decide whether the result should be returned as string or inside an array.
 *
 * @param $html_string
 * @param $tagName
 * @param string $return_as
 * @return array|string
 */
public function getOuterHTMLFromTagName($html_string,$tagName,$return_as='array')
{
    //create a new DomDocument based on the first parameter's html
    $dom_doc= new \DOMDocument();
    $dom_doc->loadHTML($html_string);

    //set variables for the result type
    $html_results_as_array = array();
    $html_results_as_string = "";

    // get tags from DocDocument
    $elements_in_tag =$dom_doc->getElementsByTagName($tagName);

    // loop through found tags
    for($a=0; $a < $elements_in_tag->length; $a++)
    {
        // get tag of current key
        $element_in_tag = $dom_doc->getElementsByTagName($tagName)->item($a);

        //create a new DomDocument that only contains the tags HTML
        $element_doc = new \DOMDocument();
        $element_doc->appendChild($element_doc->importNode($element_in_tag,true));

        //save the elements HTML in variables
        $html_results_as_string .= $element_doc->saveHTML();
        array_push($html_results_as_array,$element_doc->saveHTML());
    }

    //return either as array or string
    if($return_as == 'array')
    {
        return $html_results_as_array;
    }
    else
    {
        return $html_results_as_string;
    }
}
Sign up to request clarification or add additional context in comments.

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.