Se muestra el carácter "Â" en lugar de "& nbsp;"

encontréeste hilo que describe mi problema bastante bien yesta La respuesta describe mi problema exactamente.

El carácter de espacio sin ruptura es el byte 0xA0 es ISO-8859-1; cuando se codifica a UTF-8, sería 0xC2,0xA0, que, si (incorrectamente) lo ve como ISO-8859-1 sale como"Â ". Eso incluye un nbsp final ...

Sin embargo, he logrado rastrear mi problema hasta una función que uso para envolver etiquetas de imagen en divs.

function img_format($str)
{
    $doc = new DOMDocument();
    @$doc->loadHTML($str);     // <-- Bonus points for the explaination of the @

    // $tags object
    $tags = $doc->getElementsByTagName('img');

    foreach ($tags as $tag) {

        $div = $doc->createElement('div');
        $div->setAttribute('class','inner-copy');
        $tag->parentNode->insertBefore($div, $tag);
        $div->appendChild($tag);

        $tag->setAttribute('class', 'inner-img');
    }

    $str = $doc->saveHTML();

    return $str;
}

En pocas palabras, ¿cómo puedo solucionar este problema dentro de esta función?

Entiendo usar;

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

solucionará este problema, pero obviamente hay algo que estoy pasando por alto dentro de la función misma.

He intentado;

$dom->validateOnParse = true;

En vano. (No sé qué hace eso de todos modos)

Respuestas a la pregunta(1)

Su respuesta a la pregunta