在Symfony项目中,我有类似的东西:
$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();
bigString方法返回的位置
<div class="info pmt0 wrap">
<p id="p_editable_2" class="editable">所谓设计,创于人,且用于人......</p>
... a bunch of other html element with Chinese in it ...
</div>
我用
private function getChildHtml($node)
{
$innerHtml= '';
$children = $node->childNodes;
foreach( $children as $child )
{
$innerHtml .= sprintf( '%s%s', $innerHtml, $child->ownerDocument->saveXML( $child ) );
}
return $innerHtml;
}
获取内部HTML。
我无法让持久元素准确地代表汉字,我得到的只是废话。使用
var_dump($innerHtml);
表明getChildHtml()不返回原始中文字符。知道我怎么能这样做吗?
答案 0 :(得分:0)
根据this question,sprintf
对您没有帮助。相反,请使用类似mb_substr()的内容。
$innerHtml .= mb_substr($child->ownerDocument->saveXML( $child ), 0);
除此之外,right encoding很可能会帮助你。
答案 1 :(得分:0)
原来问题出在Symfony Crawler上。
正如here所述,一个好的解决方法是编写
$crawler = new Crawler();
$crawler->addHtmlContent($this->bigString());
而不是
$crawler = new Crawler($this->bigString());
因为addHtmlContent方法默认以UTF8编码