【问题标题】:PHP HTML DOM, XPATH - weird characters?PHP HTML DOM,XPATH - 奇怪的字符?
【发布时间】:2013-10-07 20:10:43
【问题描述】:

假设$html_dom 包含一个页面,其中包含  等HTML 实体。在下面的输出中,我得到这样的输出 

$html_dom = new DOMDocument();
@$html_dom->loadHTML($html_doc);
$xpath = new DOMXPath($html_dom);

$query   = '//div[@class="foo"]/div/p';
$my_foos = $xpath->query($query_abstract);
foreach ($my_foos as $my_foo)
{
    echo html_entity_decode($my_foos->nodeValue);
    die;
}

如何正确处理此问题,以免出现奇怪的字符?我尝试了以下操作但没有成功:

$html_doc = mb_convert_encoding($html_doc, 'HTML-ENTITIES', 'UTF-8');
$html_dom = new DOMDocument();
$html_dom->resolveExternals = TRUE;
@$html_dom->loadHTML($html_doc);
$xpath = new DOMXPath($html_dom);

$query   = '//div[@class="foo"]/div/p';
$my_foos = $xpath->query($query);
foreach ($my_foos as $my_foo)
{
    echo html_entity_decode($my_foos->nodeValue);
    die;
}

【问题讨论】:

    标签: php xpath domdocument html-entities html-escape-characters


    【解决方案1】:

    mb_convert_encoding 是个好主意,但它没有按预期工作,因为DOMDocument 在编码方面似乎有点大问题。

    mb_convert_encoding 移动到实际的节点输出就可以了。

    $html_dom = new DOMDocument();
    $html_dom->resolveExternals = TRUE;
    @$html_dom->loadHTML($html_doc);
    $xpath = new DOMXPath($html_dom);
    
    $query   = '//div[@class="foo"]/div/p';
    $my_foos = $xpath->query($query);
    foreach ($my_foos as $my_foo)
    {
        echo mb_convert_encoding($my_foo->nodeValue, 'HTML-ENTITIES', 'UTF-8');
        die;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2013-09-20
      • 2012-10-15
      • 2012-10-06
      • 2011-10-13
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多