質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

14718閲覧

[phpQuery]スクレイピングしてきた文字列が文字化けしている

kalon

総合スコア198

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

2クリップ

投稿2016/09/14 18:32

編集2016/09/14 19:00

いつもお世話になっております。

phpQueryでスクレイピングの練習をしているのですが、HTML構造はそのままコピーして来れているようですが、その中の日本語が文字化けしてしまします。

ターゲットにしている文字コードはUTF-8で、プログラムでもUTF-8を利用しているのですが、やはり文字化けしてしまします。そのようにしたら文字化けしないようにできるのでしょうか?

php

1<?php 2ini_set('display_errors',1); 3header("Content-Type: text/html; charset=UTF-8");//文字化け防止 4 5 6require_once('phpQuery.php'); //phpQueryというモジュールを使う 7 8// HTMLデータを取得する 9$html = file_get_contents('http://meigen.keiziban-jp.com/'); //ターゲットのURL 10 11// HTMLをオブジェクトとして扱う 12$doc = phpQuery::newDocument($html); 13//$doc = phpQuery::newDocument($html, 'HTML-ENTITIES', 'EUC-JP');//ここでもUTF-8を指定して見るもWarning: DOMDocument::saveHTML(): unknown encodingが発生する 14 15$messages = $doc['div.gaiyoutop']->find('.100sen'); //これだけでトリミングしたい要素が<html><header><body>付きで代入される 16 17echo $messages; //文字化け!

文字化けした結果がこちらです。

html

1<html><head><style id="style-1-cropbar-clipper">/* Copyright 2014 Evernote Corporation. All rights reserved. */ 2.en-markup-crop-options { 3 top: 18px !important; 4 left: 50% !important; 5 margin-left: -100px !important; 6 width: 200px !important; 7 border: 2px rgba(255,255,255,.38) solid !important; 8 border-radius: 4px !important; 9} 10 11.en-markup-crop-options div div:first-of-type { 12 margin-left: 0px !important; 13} 14</style></head><body><p class="100sen"> 15「ありがとう」を伝え忘れると一生後悔するよ 16<br> 17(不明) 18</p> 19<p class="100sen"> 20経験というのは、莫大なお金に匹敵する価値がある<br>(ベンジャミン・フランクリン) 21</p> 22<p class="100sen"> 23人生は見たり、聞いたり、試したりの3つの知恵でまとまっているが 24<br> 25多くの人は見たり聞いたりばかりで 26<br> 27一番重要な“試したり”をほとんどしない<br>(本田宗一郎) 28</p> 29<p class="100sen"> 30人が想像できるすべての事は起こりうる現実ã&nbsp;<br>(ウィリー・ガロン) 31</p> 32<p class="100sen"> 33懐疑は発明の父である<br>(ガリレオ・ガリレイ) 34</p> 35<p class="100sen"> 36大きい夢を持て。小さい一歩を踏み出せ<br>(竹内均) 37</p> 38<p class="100sen"> 39無知を恐るるなかれ、偽りの知識を恐れよ<br>(ブレーズ・パスカル) 40</p> 41<p class="100sen"> 42実際に見ないと分からない。見ようとしなければ始まらない<br>(ガリレオ・ガリレイ) 43</p> 44<p class="100sen"> 45「まã&nbsp;足りないかもしれない」と考える<br>(松下幸之助) 46</p> 47<p class="100sen"> 48天才とは本質を見抜く人である<br>(カーライル) 49</p> 50<p class="100sen"> 51自然は我々の知性にとっては限りなく驚嘆すべきことを 52<br> 53最高度の容易さと単純さで行っているのã&nbsp;<br>(ガリレオ・ガリレイ) 54</p> 55<p class="100sen"> 56地球は俺の遊園地ã&nbsp;<br>(三浦雄一郎) 57</p> 58<p class="100sen"> 59花は何故美しいか。<br>一筋の気持ちで咲いているからã&nbsp;<br>(八木重吉) 60</p> 61<p class="100sen"> 62友達に好かれようなどと思わず、友達から孤立してもいいと腹を決めて 63<br> 64自分を貫いていけば本当の意味でみんなに喜ばれる人間になれる<br>(岡本太郎) 65</p> 66<p class="100sen"> 67相手の過ちを必要以上に追及した瞬間<br>不幸が始まります<br>(ジョセフ・マーフィー) 68</p> 69<p class="100sen"> 70大人は子供のé&nbsp;ƒã®ç´”粋なパワーをなくしてしまっている。 71<br> 72まず、「できない」ことから発想してしまう<br>(片山右京) 73</p> 74<p class="100sen"> 75結果ã&nbsp;けの成功に価値はない。 76<br> 77仲間と共に作ってきた過程にこそ、価値がある<br>(æ&nbsp;—城史多) 78</p> 79<p class="100sen"> 80花はたã&nbsp;咲く たã&nbsp;ひたすらに<br>(相田みつを) 81</p> 82<p class="100sen"> 83健康な人には病気になる心配があるが 84<br> 85病人には回復するという楽しみがある<br>(寺田寅彦) 86</p> 87<p class="100sen"> 88意識の高さと人生の充実度は連動している<br>(不明) 89</p> 90<p class="100sen"> 91「恥ずかしい」と感じることから進歩は始まる<br>(野村克也) 92</p> 93<p class="100sen"> 94逆境に勝る教育はない<br>(ベンジャミン・ディズレーリ) 95</p> 96<p class="100sen"> 97自分との約束がある<br>(岩川直裕) 98</p> 99<p class="100sen"> 100有名な人と普通の人を分けるのは 101<br> 102何かに打ち込んã&nbsp;量の差ã&nbsp;と思う<br>(イアン・ソープ) 103</p> 104<p class="100sen"> 105人と出会ったおかげで、自分とも出会えた<br>(谷川俊太郎) 106</p> 107<p class="100sen"> 108夢を実現できるか否かは途中で諦めるかどうかにかかっています。 109<br> 110必要なのは強い情熱(スティーブ・ジョブズ) 111</p> 112<p class="100sen"> 113例えその恐怖が合理的であっても挑戦するに値することであれば 114<br> 115その恐れをやり過ごして前に進むべきã&nbsp;<br>(イーロンマスク) 116</p> 117<p class="100sen"> 118情熱を持つ1人は、情熱を持たない100人に勝る<br>(ウォルト・ディズニー) 119</p> 120<p class="100sen"> 121本当に危険なのは、何もしないことã&nbsp;<br>(デニス・ウェイトリー) 122</p> 123<p class="100sen"> 124弱くても、もっと弱い奴を見つけちゃダメ<br>(田茂青志) 125</p> 126<p class="100sen"> 127出世とは「世に出る」と書く。会社に評価してもらうためではなく 128<br> 129どこに行っても通用する自分になるためにé&nbsp;‘張ること<br>(藤巻幸夫) 130</p> 131<p class="100sen"> 132真実はいつも少数派(湯川秀樹) 133</p> 134<p class="100sen"> 135もっとも危険なことは 136<br> 137敗北よりもむしろ自分の敗北を認めるのを恐れることであり 138<br> 139その敗北から何も学ばない事である<br>(レーニン) 140</p> 141<p class="100sen"> 142現代社会において最大のリスクは 143<br> 144「人生を後悔すること」ã&nbsp;と思うんです。 145<br> 146金銭的なリスクなんて、ある意味大したことはない<br>(三木谷浩史) 147</p> 148<p class="100sen"> 149成功する人は、リスクとギャンブルを見極めて行動する<br>(本田健) 150</p> 151<p class="100sen"> 152人生の目標は一つであっても、そこに到達するための道は人の数ã&nbsp;けある<br>(佐藤英樹) 153</p> 154<p class="100sen"> 155山は西からも東からでも登れる。 156<br> 157自分が方向を変えれば、新しい道はいくらでも開ける<br>(松下幸之助) 158</p> 159<p class="100sen"> 160あなたの人生をかわりに生きてくれる人はいないわ<br>(ドリー・パートン) 161</p> 162<p class="100sen"> 163臆病者の目には、敵は常に大軍に見える<br>(織田信長) 164</p> 165<p class="100sen"> 166人生から返ってくるのは、いつかあなたが投げた球<br>(斎藤茂太) 167</p> 168<p class="100sen"> 169ç´&nbsp;直な心・熱意・努力といった言葉は 170<br> 171あまりにプリミティブなために、誰も気に留めない。 172<br> 173しかし、そういう単純な原理こそが人生を決めていくポイントなのã&nbsp;<br>(稲盛和夫) 174</p> 175<p class="100sen"> 176僕が一番大事にしているのは「真・善・美」です。 177<br> 178商売の利害といったものよりも人間の良識を大事にしたい。 179<br> 180今あなたがやっていることは 181<br> 182社会のお役に立っていますかと考えることが大事です<br>(柳井正) 183</p> 184<p class="100sen"> 185明日に死を迎えるとしても 186<br> 187今日から幸福になって遅くないのです<br>(中村天風) 188</p> 189<p class="100sen"> 190続けることは難しいが続けたことã&nbsp;けが自信につながる<br>(小山進) 191</p> 192<p class="100sen"> 193成功の陰にはやはり苦労がある。<br>周りを否定するのではなく自分と向き合う事<br>(HIRO) 194</p> 195<p class="100sen"> 196人に裏切られたことなどない。自分が誤解していたã&nbsp;けã&nbsp;<br>(高倉健) 197</p> 198<p class="100sen"> 199無我夢中の時間の中にこそ、人生の充実がある<br>(安藤å¿&nbsp;雄) 200</p> 201<p class="100sen"> 202人生は「質問力」で決まります<br>(本田健) 203</p> 204<p class="100sen"> 205貴方のあらゆる言動を誉める人は信é&nbsp;¼ã™ã‚‹ã«å€¤ã—ない。 206<br> 207間違いを指摘してくれる人こそ信é&nbsp;¼ã§ãã‚‹<br>(ソクラテス) 208</p> 209<p class="100sen"> 210立派な人は何事にも道理にあうかどうかを考えてから行動に移す。 211<br> 212つまらない人は何事にも得するかどうかを考えてから行動に移す<br>(吉田松陰) 213</p> 214</body></html>
shimane👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

newDocumentの前にmb_convert_encodingでHTML-ENTITIESに変換しておくと直ります

php

1$doc = phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));

※同じような事例がtaratailにあります。

phpQueryも内部的にはDOMDocumentを使っているので、HTML5形式の文字コード指定に対応していないのではないかと

投稿2016/09/14 20:39

編集2016/09/14 20:49
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kalon

2016/09/14 21:02

解決しました。phpQueryでも使えるとはつゆ知らずでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問