![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
cURLを使った場合のエンコードに悩まされています。
$http = new SimplecURL($url); /*cURLを使って指定ページのhtmlを取得する自己関数*/
$html = $http->execute();
$html = mb_convert_encoding($html, "UTF-8", "auto");
この後、取得したHTMLを、
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
//body部から該当するUrlを抽出
$extracts = $xpath->query($xPath);
foreach ($extracts as $value)
{
$results = trim($value->nodeValue);
$results[] = $result;
}
のようにして取得しているのですが、日本語が文字化けする場合が非常に多いです。
$html = mb_convert_encoding($html, "UTF-8", "auto");
とか、
$result = mb_convert_encoding($result, 'UTF-8', 'auto');
とかするのですがダメです。
色々なサイトでそうなのですが、例えばShift-JISで書かれていると思われる
http://www.nhk.or.jp/worldwave/abc/popup/abc1205 …
などでも日本語を
//div[@class=\"paragraph clearfix\"]//p[@class=\"ja\"]/text()
のようなxPathで取得すると文字化けして出てきます。
mb_convert_encoding($html, "UTF-8", "Shift-JIS")のようにしてもダメです。
どのようにすれば解決するのでしょうか?
アドバイスを頂けないでしょうか?
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だし・・・
この回答への補足
ちなみに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)
となりました。
ご返答ありがとうございます。
>提示されたサイトをfile_get_contentsで読んでmb_convert_encodingした限りでは問題なくutf-8に置換されました。
そうですか・・・。
自分の場合何が悪いのでしょうか。
cURLで取ってきた後にどこでエンコードを変更すればいいのでしょうか?
自分の今までの経験上、
$extracts = $xpath->query($branchURL_xPath);
よりも前でエンコードを変更するとエラーが出ました。
なので、
$result = trim($value->nodeValue);
の部分でエンコード変更するしかないと思っていたのですが、どうにも上手くいきません。
>提示されているのは実際に動いているソースではありませんよね?
申し訳ございませんでした。
そうです。
query()の部分の引数は後から変更して入れたものです、間違いです。
$resultsのところもおかしいですね・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IMAP関数で取得した文字列の、...
-
SQL Serverで文字コードUTF-8
-
文字コードの検出が正しいかを...
-
廣のjis変換で文字化け
-
phpのメールフォームの完了画面...
-
SJIS→UTF-8変換後の文字化けに...
-
文字化け変換方法
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
文字の入力で横バー上段、中断...
-
COBOLの改行
-
改行コード(CR/LF)の設...
-
ソースコードの1行が長いとき...
-
メッセージボックスで1025文字...
-
全角括弧と全角読点の間隔を狭...
-
PHPで<a>タグ内からURLと文字を...
-
Excel関数「COUNTIF」で”文字”...
-
改行コード2種類を混在させたい
-
ダブルコーテーション(
-
コンボボックスの項目中に改行を
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
SQL Serverで文字コードUTF-8
-
SJISで取得した半角カナをUTF-8...
-
PHPmailerでの添付ファイルの文...
-
PostgreSQLからCSV形式でエクス...
-
PHP+Postgres 「髙」が文字化け
-
UTF8メールがLotus Notesで文字...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
PHPのsendmailでの文字化けにつ...
-
「あ」→「82A0」のようにshift-...
-
メールのCCに複数のアドレスを...
-
mb_ereg_replace での文字変換
-
phpMyAdmin内での文字化け
-
PHP cURLでPOSTした値が文字化...
-
mail()で送信したメールのタイ...
-
RSSを取得すると文字化けする。
-
includeファイルの文字コードに...
-
UTC-8→SJISで文字化け
-
DOMDocumentの文字化けに悩まさ...
-
マルバツゲームのプレーヤー交...
おすすめ情報