Странные символы при извлечении текста из HTML - PullRequest
0 голосов
/ 12 июля 2011

Я извлекаю некоторый текст из 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 голосов
/ 12 июля 2011

Я обнаружил, что конвертирую HTML из windows1256 в utf в какой-то другой части кода.Теперь, когда я снова проверял набор символов html, используя его мета, он, конечно, сказал, что это windows1256, хотя я бы уже преобразовал его в utf.Позже я снова пытался преобразовать его в utf и так странные символы.

В любом случае, спасибо

...