用PHP读取HTML中的汉字

时间:2017-08-19 03:06:11

标签: php symfony

在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()不返回原始中文字符。知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:0)

根据this questionsprintf对您没有帮助。相反,请使用类似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编码