• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DOMDocumentの文字化けに悩まされています)

DOMDocumentの文字化けに悩む|cURLを使ったエンコードに悩む

このQ&Aのポイント
  • 質問者は、cURLを使用してHTMLを取得する際に文字化けの問題に直面しています。
  • 質問者は既に`mb_convert_encoding`を使用してエンコードを変換しようとしましたが、うまくいきませんでした。
  • 質問者は、Shift-JISで書かれたページでも文字化けしてしまうことに困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

mb_convert_encodingの第3引数(from encoding)を"auto"にした場合、検出順序はmb_detect_order()の設定に依存します。今現在のmb_detect_order()がどうなっているか確認してください。 >mb_convert_encoding($html, "UTF-8", "Shift-JIS")のようにしてもダメです。 提示されたサイトをfile_get_contentsで読んでmb_convert_encodingした限りでは問題なくutf-8に置換されました。 そこから先はちょっとわかりません。というか $extracts = $xpath->query($xPath); 変数名もtypoがありますし、提示されているのは実際に動いているソースではありませんよね?queryの引数が$xPathだし・・・

valilian
質問者

お礼

ご返答ありがとうございます。 >提示されたサイトをfile_get_contentsで読んでmb_convert_encodingした限りでは問題なくutf-8に置換されました。 そうですか・・・。 自分の場合何が悪いのでしょうか。 cURLで取ってきた後にどこでエンコードを変更すればいいのでしょうか? 自分の今までの経験上、 $extracts = $xpath->query($branchURL_xPath); よりも前でエンコードを変更するとエラーが出ました。 なので、 $result = trim($value->nodeValue); の部分でエンコード変更するしかないと思っていたのですが、どうにも上手くいきません。 >提示されているのは実際に動いているソースではありませんよね? 申し訳ございませんでした。 そうです。 query()の部分の引数は後から変更して入れたものです、間違いです。 $resultsのところもおかしいですね・・・。

valilian
質問者

補足

ちなみにmb_detect_order()の結果は array 0 => string 'ASCII' (length=5) 1 => string 'JIS' (length=3) 2 => string 'UTF-8' (length=5) 3 => string 'EUC-JP' (length=6) 4 => string 'SJIS' (length=4) となりました。

すると、全ての回答が全文表示されます。

専門家に質問してみよう