2011-07-12 11 views
0

htmlから文字列として渡されるテキストを抽出しています。抽出されるテキストの形式は奇妙です。それはアラビア語でなければならないが、抽出時に奇妙な文字を表示している。私は理解しやすいようにコードにコメントしました。全体的に、コードはhtmlの文字セットを見つけるために何をしますか? (utf、windows-1256)、適切な方法で文書をロードします。 htmlノード解析を使用して、必要なhtml要素をループ内で検索し、それぞれの必要なテキストを抽出します。htmlからテキストを抽出する際の奇妙な文字

問題がif文の中の二つの文である

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

を動作し、コメントアウトされた後の次の文は、そうすべきではないと上記の2文なしで動作するはずちんぷんかんぷんテキストを示しています。だから何が原因だろうか?

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

コード:私はコードの他の部分では、UTFにwindows1256から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"]+))[email protected]', $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

@演算子の使用を避けてください。それはパフォーマンスにかなりの影響を与える可能性があり、コードをデバッグするときに必要となるよりもはるかに難しくなります。 error_reporting、display_errors、およびlog_errorsのPHP設定またはini_set呼び出しを使用してエラーメッセージ出力を構成する方がずっと優れています。 – GordonM

+0

なぜ2つの同じエンコーディングで 'iconv'を使用しますか? –

+0

@Marek Sebera:それは不思議なことに、それがなければ動作しません。それらの奇妙な文字を入手してください –

答えて

0

。今、私はHTMLの文字セットをそのメタを使ってチェックしていたとき、それはwindows1256と言っています。私はすでにutfに変換していました。だから後で私は再びそれをutfに秘密裏にしようとしていました。

ありがとうございます

+1

あなたは解決としてマークするためにあなた自身の答えを受け入れることができます。 – TRiG

+0

@TRiG - 2日待つように頼んだ –

+0

@Imran:2日以上経ちました。 –

関連する問題