In a Symfony project, I have something like this:
$crawler = new Crawler($this->bigString());
$array = array();
foreach($crawler->filter('.editable') as $domElement )
{
    $innerHtml = $this->getChildHtml($domElement);
    $array[$domElement->getAttribute('id')] = $innerHtml;
    $domElement->nodeValue = '{{ listEditables["' . $domElement->getAttribute('id') . '"] }}';
    $crawler->addNode($domElement);
 }
$page->setEditables($array);
$em->persist($page);
$em->flush();
Where the bigString method returns
<div class="info pmt0 wrap">
  <p id="p_editable_2" class="editable">所谓设计,创于人,且用于人......</p>
  ... a bunch of other html element with Chinese in it ...
</div>
and I use
private function getChildHtml($node) 
{
    $innerHtml= '';
    $children = $node->childNodes;
    foreach( $children as $child )
    {
        $innerHtml .= sprintf( '%s%s', $innerHtml, $child->ownerDocument->saveXML( $child ) );
    }
    return $innerHtml;
}
to get the inner HTML.
I can't get the persisted elements to be accurately representing the Chinese characters, all I get is nonsense. Using
 var_dump($innerHtml);
shows that getChildHtml() doesn't return the original Chinese characters. Any idea how I can get it to do so?
 
    