从html中提取文本时出现奇怪的字符

时间:2011-07-12 09:42:52

标签: php html-parsing

我从html中提取一些文本作为字符串传递。提取的文本格式很奇怪。它应该是阿拉伯语,但在提取时会显示奇怪的字符。我已经对代码进行了评论,以便于理解。总的来说,代码用什么来找出传递的html的字符集,例如(utf,windows-1256),然后以适当的方式加载文档。使用html节点解析在循环中查找所需的html元素并提取每个所需的文本。

问题是if语句中的两个语句

$html =  @iconv('windows-1256', 'windows-1256', $html);
@$doc->loadHTMl($this->metaUtf8. $html);

以下陈述后面的陈述显示了不应该如此的乱码文本,并且应该在没有上述两个陈述的情况下起作用。那可能是什么原因呢?

//@$doc->loadHTMl($this->metaWindows1256. $html);

代码:

    //strings declared that will appended to html when loading the doc
    public $metaWindows1256 = '<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"/>' ;
    public $metaUtf8 = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>' ;

    //extract characterset of html passed in variable $html
    preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i', $html, $matches );
    if ( isset( $matches[3] ) )
    {
        $charset = $matches[3];
    }

    $doc = new DOMDocument();
    if(!($charset=='UTF-8') && !($charset=='utf-8'))
    {

            $html =  @iconv('windows-1256', 'windows-1256', $html);
            @$doc->loadHTMl($this->metaUtf8. $html);
        //@$doc->loadHTMl($this->metaWindows1256. $html);
    }
    else
    {
            echo 'LOADING UTF';
        @$doc->loadHTMl($this->metaUtf8. $html);
    }

    foreach($doc->getElementsByTagName($element_tagname) as $element)
    {
        if (substr_count($element->getAttribute($attribute),$value)!=0) //if the title of the div contains 'post_message'
        {
            $found_element[]= $element->getAttribute('href');
            $found_element[]= $element->nodeValue;
            $found_elements[] = $found_element;
            unset($found_element);
        }
    }`

1 个答案:

答案 0 :(得分:0)

我发现我在代码的其他部分将html从windows1256转换为utf。现在,当我使用它的meta再次检查html的字符集时,它会说它是windows1256,尽管我已经将它转换为utf。所以后来我再次尝试将它再次转换为utf,以及那些奇怪的角色。

非常感谢