• 締切済み

他サイトからの値の取得

simple_html_dom.php を使用して、他のサイトから値を取得しようとしています。 <table summary="abc"> <tr> <td width="220">モンブラン</td> <td width="120">300円</td> </tr> </table> となっていて、「300円」を取り出したいなら、 $cake_price_all=$e->find('table[summary=abc]'); $price=$cake_price_all[0]->find('td'); echo $price[1]; で取得できます。 質問は、下記のように日本語で書いてある場合の取得方法です。 <table summary="ケーキ"> <tr> <td width="220">モンブラン</td> <td width="120">300円</td> </tr> </table> $string="ケーキ"; $codeList = array("Shift_JIS","EUC-JP","SJIS","UTF-8","JIS");//エンコード用リスト $string = mb_convert_encoding($string,"UTF-8",mb_detect_encoding($string,$codeList)); //echo $string; $cake_price_all=$e->find('table[summary='.$string.']'); $price=$cake_price_all[0]->find('td'); echo $price[1]; これでは、エラーになります。 この日本語のワードで検索しなければならない場合の書き方を教えてください。

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

Array to string conversion in C:\xampp\htdocs\cake_price_get.php on line 行番号 その行が多分 $string = mb_convert_encoding($string,"UTF-8",mb_detect_encoding($string,$codeList)); Array to string conversion 配列を変換してるよ $string が配列なんじゃない? その cake_price_get.php がどういう物かわからないからよーわかりませんが。 エラー出る前にでも print_r($string);してみては?

cej9rbwh
質問者

お礼

回答ありがとうございます。 日本語ではなく、代わりに「abc」を使って、検索結果を実行した場合、 $cake_price_all=$e->find('table[summary=abc]'); echo $cake_price_all[0]; で表示されるものは、 <table summary="abc"> <tr> <td width="220">モンブラン</td> <td width="120">300円</td> </tr> </table> の部分です。つまり、テーブルタグで囲まれた部分が、ごっそり取得されます。では、「abc」を日本語の「ケーキ」に変えると、 Undefined offset: 0 in C:\xampp\htdocs\cake_price_get.php on line 行番号 のエラーになります。ですので、文字コードを一致させた上で、検索をかけないといけないと思い、mb_convert_encodingとか使っています。 ご指摘のように、print_r($string); すると、エラーはでないものの、文字列が文字化けした状態で表示されます。ですので、文字コードが異なるもの同士で検索をかけているため、見つからないのではないか? 正しい文字コードで検索し、その結果を文字化けしない状態で表示させるには? というところで、行き詰まっています。

回答No.1

すごい質問ですな。。。。。 どんなエラーが出るかもわからず、 その関数の中身もわからず、 誰が答えれるの?wwwwwwww まずは質問の仕方を勉強しましょう。。 どういうエラーが出て、自分がやった問題の切り分け方等々 問題の切り分け等々をまったくやってないならそれも書きましょう。 丸投げ質問は嫌われるとは思いますが。

cej9rbwh
質問者

お礼

ご指摘ありがとうございました。関数は、他サイトから値・文字列などを取得するときに使われるsimplehtmldomを使っています。 参考:http://simplehtmldom.sourceforge.net/manual.htm エラーは、 Notice: Array to string conversion in C:\xampp\htdocs\cake_price_get.php on line 行番号 Array です。 <table summary="ケーキ"> を <table summary="abc"> として、$string="abc"; とすると、 $cake_price_all=$e->find('table[summary='.$string.']'); $price=$cake_price_all[0]->find('td'); echo $price[1]; で価格が取得できたので、検索に文字列を使用した場合の書き方は合っていると思います。 問題は、 $string = mb_convert_encoding($string,"UTF-8",mb_detect_encoding($string,$codeList)); の部分が正しく変換されているかということと、次の $cake_price_all=$e->find('table[summary='.$string.']'); の検索部分がうまく機能していないということです。 問題の切り分けはこんなところです。

関連するQ&A

  • IEではうまく行くのですが他のブラウザでも表示できるように…

    下記のようにしたのですが、IEではうまくゆくのですが、 他のブラウザではできません。 同じようにするにはどのように調整したらよいのか教えてください。 <DIV> <SPAN style="overflow:hidden;width:30px"> <TABLE border="1" width="100%"> <TR bgcolor="silver"><TD>A</TD></TR> </TABLE> </SPAN> <SPAN id="title" style="overflow-y:scroll;overflow-x:hidden;width:150px;"> <TABLE border="1" style="table-layout:fixed;width:150px"> <TR bgcolor="silver"><TD>C</TD><TD>D</TD><TD>E</TD></TR> </TABLE> </SPAN> </DIV> <!--本体部分--> <DIV> <SPAN id="fixedcols" style="overflow:hidden;overflow-x:scroll;width:30px;height:80px;"> <TABLE border="1" style="width:100%" bgcolor="#ffffcc"> <TR><TD>F</TD></TR> <TR><TD>K</TD></TR> <TR><TD>P</TD></TR> <TR><TD>U</TD></TR> </TABLE> </SPAN> <SPAN id="maincols" style="overflow:scroll;width:150px;height:80px" onscroll="fnc_scroll()"> <TABLE border="1" style="table-layout:fixed;width:150px"> <TR><TD>H</TD><TD>I</TD><TD>J</TD></TR> <TR><TD>M</TD><TD>N</TD><TD>O</TD></TR> <TR><TD>R</TD><TD>S</TD><TD>T</TD></TR> <TR><TD>W</TD><TD>X</TD><TD>Y</TD></TR> </TABLE> </SPAN> </DIV> <SCRIPT language="javascript"> <!-- function fnc_scroll(){ document.all.item('fixedcols').scrollTop=document.all.item('maincols').scrollTop; document.all.item('title').scrollLeft=document.all.item('maincols').scrollLeft; } --> </SCRIPT>

  • 動的なtableの値を取得したい

    いつもお世話になります。 見よう見まねでやっている超初心者です。 下記の様なテーブル(phpで読み込んでいますので実際は動的です。) の回答ボタンをクリックすると テーブル下の<INPUT type="text" name="kotae">に ボタンをクリックされた行のb列の値を入れたいと思っています。 function kaito()をどのように書いたら取得できるか悩んでいます。 初心者なもので具体的な回答でしたら助かります。 ご教授の程どうぞよろしくお願い致します。 <html> <head> <meta content="text/html; charset=utf-8" /> <script> </script> </head> <body> <table width="100" border="1"> <tr> <th width="30" scope="col">a</th> <th width="30" scope="col">b</th> <th width="40" scope="col">c</th> </tr> <tr> <td>1</td> <td>2</td> <td><input type="button" value="回答" onclick="kaito()"/></td> </tr> <tr> <td>5</td><td>3</td> <td><input type="button" value="回答" onclick="kaito()"/></td> </tr> <tr> <td>5</td> <td>4</td> <td><input type="button" value="回答" onclick="kaito()"/></td> </tr> <tr> <td>5</td> <td>5</td> <td><input type="button" value="回答" onclick="kaito()"/></td> </tr> </table> <INPUT type="text" name="kotae" size="12" > </body> </html>

  • vb2005でwebbrowserに表示したテーブルタグの値を取得したい。

    <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> </head> <body> <table width="450" border="1"> <tr> <th scope="col">&nbsp;</th> <th scope="col">&nbsp;</th> </tr> <tr> <th scope="row">&nbsp;</th> <td><table width="450" border="1"> <tr> <th scope="col">&nbsp;</th> <th scope="col">&nbsp;</th> </tr> <tr> <th scope="row">&nbsp;</th> <td>【xyz】</td> </tr> </table></td> </tr> </table> </body> </html> このようなhtml文書があったとして、 【xyz】この値を取得したいのですが WebBrowser1.Navigate("上記のhtml文書のURL") Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete) My.Application.DoEvents() System.Threading.Thread.Sleep(50) Loop からどのようにコーディングすれば取得できるんでしょうか?できるだけ文字列操作をするのではなくて、 用意された2.0のクラス群を利用して取得したいんです。教えてください。お願いします。

  • JQueryでクリックされた文字を取得したい

    テーブルがあり、連番が 1 2 3 と振ってあります。 その文字情報をJQueryで取得するにはどのように記述すれば良いのでしょうか? 例)1をクリック → 1 を取得。 <table border="1" width="150"> <tbody> <tr> <td width="50"><a href="#">1</a></td> <td>田中</td> </tr> <tr> <td><a href="#">2</a></td> <td>佐藤</td> </tr> <tr> <td><a href="#">3</a></td> <td>鈴木</td> </tr> </tbody> </table> ご存知の方教えて下さい。

  • 文字化け

    文字コードをEUCにて統一しているにも関わらず、 結果画面をみると下記のように化けてしまいます。 原因を教えて頂きたく思います。 よろしくお願いします。 データを表示する ID 名前 出身 年齢 1 ???? ??? 30 2 ???? ??? 20 <html> <head> <title>データを表示する</title> </head> <body> <h3>データを表示する</h3> <?php // 表示文字コード $disp_enc = "EUC-JP"; // データの文字コードを変換する関数 function cnv_dbstring($string, $enc) { // 文字コードを変換する $det_enc = mb_detect_encoding($string); if ($det_enc and $det_enc != $enc) { return mb_convert_encoding($string, $enc, $det_enc); return mb_convert_encoding($string, $enc, $det_enc); } else { return $string; } [DB接続部分省略] // 取り出したデータを表示する echo "<table border=\"1\">"; echo "<tr>"; echo "<td>ID</td>"; echo "<td>名前</td>"; echo "<td>出身</td>"; echo "<td>年齢</td>"; echo "</tr>"; while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_dbstring($row["nam"], $disp_enc)."</td>"; echo "<td>".cnv_dbstring($row["pre"], $disp_enc)."</td>"; echo "<td>".$row["ag"]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html>

    • ベストアンサー
    • PHP
  • ★画面からの値の取得方法について★

    下記のようなソフトをJAVAで作ろうと考えているのですが、 画面から値を取得する方法が思い浮かびません。 http://www.ne.jp/asahi/mochiyama/my/ 例として、下記ページの日経平均の値を取得したいのですが、 皆さんならどのように取得されますでしょうか? https://newtrading.etrade.ne.jp/ETGate/?_ControlID=WPLETmkR001Control&_PageID=DefaultPID&_DataStoreID=DSWPLETmkR001Control&_ActionID=DefaultAID&getFlg=on 下記はページのソースデータです。 <!--日経平均--> <td width="120" bgcolor="#ffffff"> <table border="0" cellspacing="0" cellpadding="1" width="100%"> <tr> <td class="mtext" nowrap>日経平均</td> <td class="mtext" align="right" nowrap>17,419.20</td> </tr> <tr> <td class="mtext" nowrap>16:00</td> <td class="mtext" align="right" colspan="2" nowrap>&nbsp;<font color="red"><img src="//a248.e.akamai.net/f/248/29350/7d/pict.etrade.ne.jp/v2/images/common/common/i_up_red.gif">&nbsp;256.00</font></td> </tr> </table> </td> <!--日経平均--> たくさんのご意見をお待ちしております。 それでは、よろしくお願い致します。

    • ベストアンサー
    • Java
  • <table>を複数使用するレイアウトでの質問です。

    <table>を複数使用するレイアウトでの質問です。 <table width=30% align=left><tr><td>A</td></tr></table> <table width=70%><tr> <td width=20%>B-1</td> <td width=80%> <table width=100%><tr> <td width=25%>C-1</td> <td width=15%>C-2</td> <td width=15%>C-3</td> <td width=15%>C-4</td> <td width=15%>C-5</td> <td width=15%>C-6</td> </tr></table> </td> </tr></table> <table width=30% align=left><tr><td>D</td></tr></table> <table width=70%><tr> <td width=★%>E-1</td> <td width=☆%> <table width=100%><tr> <td width=20%>F-1</td> <td width=20%>F-2</td> <td width=20%>F-3</td> <td width=20%>F-4</td> <td width=20%>F-5</td> </tr></table> </td> </tr></table> ・”★%”は、(”B-1”+”C-1”)と同じ幅 ・”☆%”は、(100%-”★”)の値 ・F-1~5は20%としたのですが(=100%)、C-2~6と同じ幅になるかどうか どのようにすれば求められるかご指導お願い致します。

    • ベストアンサー
    • HTML
  • 特定のセルの値のみ改行しないようにするには?

    <table border="1" width="100px" style="table-layout:fixed;"> <tr> <td>あいうえお</td> <td nowrap>かきくけこ</td> </tr> <tr> <td>さしすせそ</td> <td>たちつてと</td> </tr> </table> 上記のコードを実行すると「かきくけこ」とかかれた行だけ改行されなくなります。 この「table-layout:fixed」以外を使って上記のように、「かきくけこ」だけ 改行されないようにするにはどうすればいいでしょうか? 調べていて「overflow:hidden」というのを見つけましたが、 やり方が悪いのかうまくいきませんでした。 よろしくお願いします

  • tableタグについて

    <table width="700" border="0"> <tr><td width="700">あああああああ</td></tr> <tr><td width="200">いい</td><td width="500">ううううう</td></tr> </table> このタグですと【ああああああ】の部分が2段になります。 多分<td width="200">のためやと思うのですが、 <tr><td width="200">いい</td><td width="500">ううううう</td></tr> の部分を <tr><td width="700"><table width="700"><tr><td width="200">いい</td><td width="500">ううううう</td></tr></table></td></tr> にすると表示されます。 この方法以外にもっと簡単に表示できる方法はないでしょうか お願いします。

    • ベストアンサー
    • HTML
  • width、heightを取得したい

    dbからデータを読み込み、データの量によってテーブルのサイズが変わります。 img.gifのwidth、heightを何らかで取得し$aと$bに渡すことは可能でしょうか。 ┌――――┬――――┐ │img.gif │inc.php │ └――――┴――――┘ <table> <tr> <td> <img src=./img.gif width=$a height=$b> </td> <td> <? include ('./inc.php'); ?> </td> </tr> </table> img.gifは四角の画像です。

    • ベストアンサー
    • PHP

専門家に質問してみよう