2017-02-15 4 views
0

HTML文字列からすべてのリンクテキストとhrefsを抽出しようとしていますが、ソース文字列がUnicodeで、nodeValueがこれに対処していないようですか?PHP:Unicode nodeValue?

$links = array(); 
$titles = array(); 

$dom = new DOMDocument(); 
$dom->loadHTML($str); 
$hrefs = $dom->getElementsByTagName("a"); 
foreach ($hrefs as $href) { 
    $links[] = $href->getAttribute("href"); 
    $titles[] = $href->nodeValue; 
} 

私の元の文字列は次のようになります。

<p><a href='uploads/root/tr_62.pdf'>Türkiye</a></p> 

しかし、$タイトルの私の出力は[0]のようになります。

Türkiye 

どのように私はのnodeValueは、Unicode文字を尊重することができます?

ありがとうございます!

+0

追加 'ヘッダー( "コンテンツタイプ:text/htmlの;のcharset = UTF-8");'スクリプトに(最初の出力の前に)、それは問題を解決しますか?文字セット; –

+0

私は、ページ上の <!DOCTYPE HTML> など... –

+0

DOMDocumentとすべてのXML関数はUTF-8にデフォルト設定されているので、Unicodeをうまく処理できます。あなたの出力からは、あなたのアプリはUnicodeでない1バイトのエンコーディングを使うか、エンコーディングを宣言できません( ''タグはほとんど無関係ですが、HTTPヘッダともちろん実際のコンテンツです)。 /// PHPコードを別にしておいてください。静的 '車'をコピーアンドペーストすると正しく印刷されますか? –

答えて

1

あなたはずっと

$dom = new DOMDocument(); 
$html_data = mb_convert_encoding($str , 'HTML-ENTITIES', 'UTF-8'); 
$dom->loadHTML($html_data ); 
$hrefs = $dom->getElementsByTagName("a"); 
foreach ($hrefs as $href) { 
    $links[] = $href->getAttribute("href"); 
    $titles[] = $href->nodeValue; 
} 
+0

これは決してUTF-8対応アプリでは必要ない回避策です。基本的なエンコーディングの設定ミスを隠すだけです。 –

0

感謝をmb_convert_encoding使用して、ユーザーVeveさんのコメントは私の質問に答えました。

は、次の行が私の問題を解決します

$str = mb_convert_encoding($str, 'html-entities', 'utf-8'); 
+0

これはダニエルの答えをコピーしたもので、問題を「解決」するものではなく、すべてを7ビットのUS-ASCIIに変換することで隠しています。 –

+0

厳密にはそうではありませんが、これはVeveのコメントにリンクされている回答のコピーです。Danielと私はどちらも再投稿しました。私はダニエルズが私のものを提出するまで答えなかった。 –

+0

十分に公正。いずれにしても、質問を正確な複製としてクローズするという考えは、どこにでも同じ情報が広がっているわけではありません。どんなところでも、私はその質問が実際に同じだとは思わない。私はあなたがアプリがUTF-8をサポートしていないと信じています。 –

関連する問題