人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで、ある簡単なHTMLを作成するようなものを作りたいと思っています。必要入力項目を入力して次へをクリックしたら、
HTMLコードと そのコードでできた内容をHTML上で結果としてどうなるのかを表示するようなプロ
グラムを作りたいと思っています。問題は、出来たHTMLコード内の<table>タグのみ取得したいと思っています。
http://d.hatena.ne.jp/kotaro01/20100511/1273588059
を参考にしながらつくろうと思ったのですがうまく掴めず、htmlコード表示が出来ません。同一のPHPで
HTML作成 HTMLコード表示 結果表示がしたいと思っています。
HTMLコード表示はjavascriptでも大丈夫です。同一php内に置いて動くものであれば大丈夫です

●質問者: たつ
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD

解答使い回しで申し訳ないが、昨日の事だし基本同じと思うので。
http://q.hatena.ne.jp/1329396133 より

そういうのをスクレイピングとか言ったりします。
http://www.php-seed.net/blog/archives/113
あと、ここで過去にあった質問ではsimple_html_dom.phpを使ってました。
http://q.hatena.ne.jp/1318845421
http://smkn.xsrv.jp/blog/2010/02/php_simple_html_dom_parser/
http://tips.recatnap.info/simple_html_dom_parser_memo/


たつさんのコメント
回答ありがとうございます。 include('simple_html_dom.php'); $html = file_get_html('http://localhost/htmlcreate/create.php’); //DOM化したものから全てのimgタグのsrc属性の値を取得 foreach($html->find('table') as $element){ echo 'outertext:' . $element->outertext . "\n"; } HTML作成とHTML結果表示している同じPHPに、tableタグ内のデータを取ろうと思ったのですが、タイムアウトしてしまいます。

たつさんのコメント
かあるいはこうしたのですが、 <?php $html= >>> EOM PHPコードとHTMLコード EOM; //URLやファイルからDOM化 include('simple_html_dom.php'); $data = str_get_html('$html'); //DOM化したものから全てのtableタグを取得 foreach($data->find('table') as $element){ echo $element->plaintext; } ?> どうもうまくいきません。もしよければ再度お願いします。 テーブルタグは以下のようになっています。 <table id="tbl" width="570" height="513" border="0" cellpadding="0" cellspacing="0"> か <table id="tbl" width="570" height="513" border="0" cellpadding="0" cellspacing="0"> となっています。

TransFreeBSDさんのコメント
>|php| <?php $html= >>> EOM PHPコードとHTMLコード EOM; ||< この方法では変数展開はされますがPHPコードは単なる文字としてしか解釈されず、実行されません。したがって$htmlにはHTMLではなくPHPのコードが入り、str_get_htmlでは処理できません。詳しくはマニュアルのヒアドキュメントの項を。 http://jp.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc 方法としてはいくつかあると思います。 +echoやhtmlモードなどで出力したものと同じものを変数に順次追加していく +echoやhtmlモードなどで出力しているものを一旦変数などに代入して、後でまとめて出力する。 +出力制御関数を使う http://www.php.net/manual/ja/function.ob-start.php 出力用関数を作ってすべての出力はそれ経由にし、その関数で出力内容を変数に保存していくのが良くやる手です。 または、そもそもHTMLを作るときにテーブルの部分を都合の良い形で取得してしまうのが普通のやり方だと思います。 しかし、それでは変更が多くなる、というなら少しトリッキーかもしれませんが3番がいいかもしれません。 (実のところは何を目的にどうしたいのかがいまいち理解できていませんので勘違いあるかも。上記が良くわからないという場合、動くサンプルコードでも示していただくとやりやすいです。)

たつさんのコメント
$htmlstr = <<<EOM if ($shop === "楽天" && $gyo === 2){ ?> <table id="tbl" width="800" height="519" border="1" cellpadding="2"> <tr> <td colspan="4" bgcolor="#990000"><font color=white face="Times New Roman, Times, serif" size=6><strong><?php echo $title ?></strong></font></td> </tr> </table> <?php } elseif ($shop === "楽天" && $gyo === 3){ ?> <table id="tbl" width="800" height="519" border="1" cellpadding="2"> <tr> <td colspan="4" bgcolor="#990000"><font color=white face="Times New Roman, Times, serif" size=6><strong><?php echo $title ?></strong></font></td> </tr> </table> <?php } else { ?> <table id="tbl" width="570" height="513" border="0" cellpadding="0" cellspacing="0"> <tr> <td colspan="4" bgcolor="#990000"><font color=white face="Times New Roman, Times, serif" size=6><strong><?php echo $title ?></strong></font>s</td> </tr> <tr> <td width="140" height="140"><a href="<?php echo $link1 ?>"><img src="<?php echo $url1 ?>" width="140" height="140" border="0" /></a></td> </tr> </table> <?php } EOM; include('simple_html_dom.php'); $data = str_get_html($htmlstr); foreach($result->find('tr') as $element){ echo $element->innertext; } ?> この中からパターンによって分けて、PHP実行後のHTMLが欲しいと思っています。

TransFreeBSDさんのコメント
1,2,3のどの方法がよいですか?

たつさんのコメント
2か3でお願いします 色々ご迷惑かけます

2 ● TransFreeBSD
ベストアンサー

長くなったので別回答で。
あと、サンプルは短く目的どおり動かなくてもエラーの出ないものがよいです。

<?php 
if ($gyo === 2){
$htmlstr = <<<EOM
<table><tr>
<td>$title</td>
</tr></table>
EOM;
} elseif ($gyo === 3){
$htmlstr = <<<EOM
<table><tr>
<td><strong>$title</strong></td>
</tr></table>
EOM;
} else {
$htmlstr = <<<EOM
<table><tr>
<td><img src="$url1"/></td>
</tr></table>
EOM;
}

include('simple_html_dom.php');
$data = str_get_html($htmlstr);
foreach($data->find('tr') as $element){
echo $element->innertext;
}
?>
<?php
ob_start();
if ($gyo === 2){
?>
<table><tr>
<td><?php echo $title ?></td>
</tr></table>
<?php } elseif ($shop === "楽天" && $gyo === 3){ ?>
<table><tr>
<td><strong><?php echo $title ?></strong></td>
</tr></table>
<?php } else { ?>
<table><tr>
<td><img src="<?php echo $url1 ?>"/></td>
</tr></table>
<?php 
}
$htmlstr = ob_get_contents();
//ob_end_flush();
ob_end_clean();
 
include('simple_html_dom.php');
$data = str_get_html($htmlstr);
foreach($data->find('tr') as $element){
echo $element->innertext;
}
?>

たつさんのコメント
ありがとうございます 今後気をつけます 上のサンプルは、全部phpの括りで大丈夫ですか?

たつさんのコメント
PHP実行結果後のHTML取得出来ました。合わせて、HTMLソースも取得したいのですが出来ますか?

TransFreeBSDさんのコメント
HTMLってHTMLソースの事ではないの? 他のHTMLソースってのは知りません。 もしかして$element->plaintextとか?

たつさんのコメント
上記のままだとHTMLソースが出なかったのです。 HTML表示になってしまうので、テキストエリアに出力するようにしたらコードだけ表示になりうまくいきました。 お騒がせしました。 色々ありがとうございます。

TransFreeBSDさんのコメント
あー、コードを表示したいって事ですね。いまさらですが。 あと、これもいまさらですが、こういう操作は理解して行わないとXSSを生じやすいですから気を付けてくださいね。 #元の生成過程が安全なら、たぶん安全だと思いますが。

たつさんのコメント
わかりました。色々ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ