• ベストアンサー

PHPでHTMLの中から <div>~</div> を取り出したい

PHP 4.4.2 を使っています。 HTMLの中の <div class="main">~</div> で囲まれているテキストを取り出したいのですが、どのようにするのが良いでしょうか。 ファイルの先頭から順番に調べていくことも検討しましたが、<div>は入れ子になる可能性もあるので、それを考えたらわからなくなりました。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 まぁ頑張って自前でパースするのが結局は一番良いんじゃないかな。他人が作ったルーチンは細かいところで要求した動きができない事もある。  ところで、入れ子になった場合の動作は、君が決める事だ。 ~~~~~ <div>現在div1の中です。</div> <div>現在div2の中です。<div>入れ子2-1になりました</div>入れ子終わり</div> ~~~~~  この状況で、div1は全く問題ないよね。<div>が現れてから</div>が現れるまでを機械的に抜き出せば良い。  div2の場合にどうしたいか。だね。 1.div2を丸ごと取り、div2-1は無視(div2の本文中として扱う) 2.div2はdiv2として取り、div2-1も1つのdivとして別個に取る。 3.div2はdiv2として取り、div2-1は1つのdiv、さらに、div2はdiv2-1を省いたものとする。  これは要求仕様なので、どうすればよいかではなくどうしたいかだ。どちらにせよ、<div>と</div>をカウントしてスタックに積んでおけば技術的に難しい事は何もない。

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

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

HTML Parser for PHP 4 https://sourceforge.net/project/showfiles.php?group_id=91649 というものがあるので紹介しておきます。 具体的にどうするかというのは、 #1の方が言われるように、 具体的な状態とどうしたいかによるので書けませんので。

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

関連するQ&A

  • div内のテキストと画像の配置について

    お世話になります。 現在CSSを勉強中なのですが、参考サイトを見てテーブルを使わずにdivとC SSで同じようなレイアウトが可能と知り、試してみたのですが、div内に配 置したテキストや画像の表示が思い通りになりません。 ソースは以下のような形です。 【HTMLの内容】 <div class="main"> <div class="main-menu">一行目テキスト<br />二行目テキスト</div> <div class="main-content"><img src="xxx.jpg"></div> </div> 【CSSの内容】 div.main { width: 500px; } div.main-menu { float: left; width: 300px; } div.main-content { float: left; } 上記に、以下の指定を追加したいと考えています。 1)main-menu内の「二行目テキスト」だけを右寄せにする。 2)main-content内の画像が常に縦位置の中央に表示されるようにする。 (main-menu内のテキストが複数行になり、divの縦幅が大きくなった場合に 画像も縦幅に合わせ中央に表示したいです。) この場合、どのような方法があるでしょうか? 勉強不足で大変恐縮ですが、よろしくお願いします。

    • ベストアンサー
    • HTML
  • HTML&CSS DIVをぴったりと縦に並べたい

    HTML&CSS初心者です。 下記のソース様に、DIVで一つにまとめたBOXを縦に並べたいのですが、 「見出し002」の上のマージンがうまく取れずに困っています。 .box内のphoto00.jpgをフロートにしている為、フロートが悪さをしている事を考え、 「見出し002」の上のDIV内に<br style="clear: both;" />を入れると、余白が生まれるのですが、 MacのSafariとFirefoxでは、余白の差が出てしまいます。(Safariの方が余白が大きい) <br style="clear: both;" />を入れないと、上のマージンはほぼ消えてしまい、わずかにFirefoxの方では余白が生まれます。 ちなみにこの現象は「ここにテキストが入ります。」の行数を減らすと解決するのですが、 下記のソースでも、photo00.jpgの高さをはみ出す行数ではない為、この<div class="box">に 変な膨らみを持たせたくありません。 どなたか解決法を教えて下さい。よろしくお願い致します。 【HTML】 <div id="main"> <div class="mds01"><h3><em>見出し001</em></h3></div> <div class="box"> <img src="img/photo00.jpg" width="155" height="108"> <h5>小見出し</h5> <p class="txt">ここにテキストが入ります。<br><br> ここにテキストが入ります。<br> ここにテキストが入ります。</p> </div> <div class="box"> <img src="img/photo00.jpg" width="155" height="108"> <h5>小見出し</h5> <p class="txt">ここにテキストが入ります。<br><br> ここにテキストが入ります。<br> ここにテキストが入ります。</p><br style="clear: both;" /> </div> <div class="mds02"><h3><em>見出し002</em></h3></div> <div class="box"> <img src="img/photo00.jpg" width="155" height="108"> <h5>小見出し</h5> <p class="txt">ここにテキストが入ります。<br><br> ここにテキストが入ります。<br> ここにテキストが入ります。</p> </div> </div> 【CSS】 /*メイン大枠部分*/ #main { margin: 0px; padding: 0px; width: 627px; float: right; background: #FFFFFF; height: auto; } /*各見出し*/ .mds01 h3 { background: url(img/mmds01.gif) no-repeat; margin: 25px 0px 15px; padding: 0px; height: 20px; width: 587px; font-size: 9px; color: #FFFFFF; clear: left; float: none; } .mds02 h3 { background: url(img/mmds02.gif) no-repeat; margin: 25px 0px 15px; padding: 0px; height: 20px; width: 587px; font-size: 9px; color: #FFFFFF; clear: left; float: none; } /*ボックス*/ .box { margin: 0px; padding: 0px; height: auto; width: 587px; clear: left; } /*ボックス内・画像とテキスト*/ #main .box img { float: left; padding-right: 10px; } #main .box h5 { font: bold 14px "MS Pゴシック", Osaka; color: #022962; margin: 0px 0px 10px; padding: 0px; } .txt { font: normal 13px/16px "MS Pゴシック", Osaka; color: #333333; margin: 0px; padding: 0px; } em { visibility: hidden; }

    • ベストアンサー
    • HTML
  • phpのプログラミングについての質問です。

    外部ファイルにテンプレートと言うか、データとしてHTMLの書かれたファイルを置くとします。 そして、メインのphpのファイルで変数や定数の処理をさせて、その外部HTMLファイルを読み込ませ、HTML内に記載した変数等を表示させるとします。 // tmp.html // <html> <body> <div> <p>こんにちは{$php}です。<br> 今日は{ConstTest::CONST_TEST}ですね。</p> <p>どうも。{$aisatsu.$php2}です。<br> 今日は{$tenki[1]}なので、悪い天気ですよ。</p> </div> </body> </html> // tmp.html ここまで // 上記のような{$変数}と言う、{ と } で囲った書き方のプログラムを良く見かけるのですが、 phpプログラム内で、どう処理させれば、表示できるのでしょうか? また、上には書きましたが、下記のように定数のクラスファイルも外部に作って、表示させることは可能でしょうか? そもそも、定数も{}で表示させることは可能なんでしょうか? もうひとつ、{$a.$b}の様に文字列の入った変数をドットでつなげると言う書き方も可能でしょうか? // main.php // <?php require_once('./class.php'); $php = 'アマガエル'; $aisatsu = 'こんにちわ。'; $php2 = '椎名アップル'; $tenki = array('晴れ','雨','曇り'); // 処理の仕方が解からないので、デタラメな?の部分です $hoge = file_get_contents('./tmp.html'); echo $hoge; // ?の部分終わり exit; ?> // main.php ここまで // // class.php // <?php class ConstTest { const CONST_TEST = '雨ですが、良い天気'; } ?> // class.php ここまで //

    • ベストアンサー
    • PHP
  • PHPでHTMLを分解してMySQLに登録

    パターン化されているHTMLソースをDBに登録したい。 環境 PHP:5.1.6 MySQL:5.0.77 下記のようなHTMLソースがあります。このソースを区切ってMySQLに登録したいと思います。 テーブル名:sample (2列構成) フィールド名:id(auto_increment),text -----HTMLソース----------------------------------------- <p> <div class="sample_title">サンプルタイトルA</div> <div class="item">サンプルアイテムA-1</div> <div class="item">サンプルアイテムA-2</div> <p> <div class="sample_title">サンプルタイトルB</div> <div class="item">サンプルアイテムB-1</div> <div class="item">サンプルアイテムB-2</div> 以下同様のデータが続く・・・100~500個程度。 -------------------------------------------------------- HTMLソースに</p>の終了タグはありません。 正規表現等で<p>から、次の<p>までのソースを取り出しを繰り返せば良いと思いますが、どのようにプログラムを作ればよいかわかりません。 求める結果は上記テーブルの 1番目のtextフィールドに <p> <div class="sample_title">サンプルタイトルA</div> <div class="item">サンプルアイテムA-1</div> <div class="item">サンプルアイテムA-2</div> 2番目のtextフィールドに <p> <div class="sample_title">サンプルタイトルB</div> <div class="item">サンプルアイテムB-1</div> <div class="item">サンプルアイテムB-2</div> という値が入っていることです。 流れとしては下記のようになると思いますが、 どのようなプログラムを書けばよいのでしょうか? <p>から次の<p>を正規表現で取り出し。 MySQLに登録。 これをソースが終わるまで繰り返す。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPファイルをincludeしてHTML表示する

    お世話になります。 PHP含めプログラム初心者の者です。 どうか知恵をお貸しください。 現在制作しているHTMLサイトがあります。レイアウトはCSSです。 そのうちのひとつのコンテンツのブログページをサイト内WordPressで更新できるようにしたいと考えています。本来なら全てのページをWordPress化したほうがいいのでしょうが、新たにまたいろいろ記述する時間がないもので、とりあえずはblog.htmlなページのコンテンツ表示領域にWordPressで作ったindex.phpが表示されたらいいなと考えております。 ネットでいろいろ調べた結果、「phpファイルをincludeする」という方法によって、それをhtmlファイルで表示する方法があるようです。そこで質問なのですが、具体的にどのようにソースを記述すればそれは可能になるのでしょうか。 (1).htaccessに「AddType application/x-httpd-php .html」と記述する。 (2)表示したいHTML部分に「include(dirname(__FILE__).'/index.php');」と記述する。 とありましたがそれだけではできませんでした。具体的にそうしればいいか教えていただけないでしょうか。(htmlの拡張子をshtmlにするとかいう情報もありましたが定かではありません。)PHPに関しては本当に初心者な者で、変な質問をしているかもしれませんがどうかよろしくお願い致します。 ※参考にした情報ソースは下記です。 http://www.yusk.org/memo/php-memo/php_include_001.html ※HTMLソースは下記です。 <body> <div id="header"> ~略~ </div> <div id="contens"> <div id="leftmenu"> ~略~ </div> <div id="rightmenu"> <div id="rightbox-inside"> <div id="rightbox-inside-txt"> <p class="title">BLOG</p> <p class="standard"> include(dirname(__FILE__).'/index.php');(←ここにブログを表示させたい) </p> </div> <div style="clear:both;"></div> <div id="rightbox-buttom"> </div> </div> </div> </div> <div id="footer"> ~略~ </div>

    • ベストアンサー
    • PHP
  • phpについて~<div>;foreach

    PHP初心者です。<div>の中でforeachって使えるのですか? <?PHP require_once 'rss_fetch.inc'; $url = $td[SITEURL]; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo<<<__EOF__ <div class="dt"> <p class="dtTitle"> <a href="{$_SERVER["PHP_SELF"]}?id={$td["ID"]}&amp;url={$td["SITEURL"]}"> {$td["SITENAME"]} </a> {$listCt} {$flgImg} </p> <p class="dtCategory">コミュニティ:{$td["CATEGORY"]}{$FlgTag}</p> $NAME <p class="dtComment">{$img}{$td["COMMENT"]}</p> $ADMINCOMMENT <p class="dtDate">登録日:{$td["REGISTDATE"]}[<a href="regist.php?id={$td["ID"]}">編集</a>]</p> この部分↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <?php foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); $url = $item[link]; $date = date("Y/m/d H:i:s", strtotime($item['dc']['date'])); ?> <p class="dtComment"> <li><a href=\"$url\">$title</a>$date</li></p> <?PHP } ?> </div> __EOF__; ?> このような書き方しか思いつかないのですが、 <div>~</div>の中でforeachの使い方を教えてください。

    • 締切済み
    • PHP
  • DIVの入れ子で、FireFoxだとレイアウトが崩れる。

    DIVの入れ子で、FireFoxだとレイアウトが崩れる。 http://www.cool-vivi.com/?p=222 このサイトの通りにやったのですが、 FireFoxだとうまく表示されません。 下記のソースから<div id="main">を消して、入れ子じゃない状態にするとうまくいきます。 どうすればいいでしょうか? <div id="main"> <div id="menu"> </div> <div id="contents"> </div> </div>

  • Divの入れ子とHeight

    こんにちわ。初歩的な質問かもしれませんがお願いします。 DivのContainerの中にPosition:Absoluteの3つのDivを入れ子にしたいんですが、Containerの高さを中身のDivの高さに依存する形にしたいのですが、うまくいきません。 Containerの高さと中身のコンテンツの高さをAutoにした場合、中身のほうは内容に依存する形で高さが自動になるんですが、Containerのほうがうまくいきません。FloatをつかわずにPosition:Absoluteでして、Containerを中身の高さに依存、という風にする方法はないのでしょうか? こちらがコードです。 HTML CODE <HTML> <HEAD> <link rel="stylesheet" href="hp.css" type="text/css" /> </HEAD> <BODY> <div class="container"> <div class="banner"> </div> <div class="menu"> </div> <div class="main"> a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br> </div> </div> </BODY> </HTML> CSS CODE * {margin:0;padding: 0;} div.container{border:2px solid RGB(888888); position: absolute; top:20px; left:50px; width:900px; height:auto;} div.banner { position: absolute; top:20px; left:80px; width:700px; height:150px; border:2px solid RGB(888888);} div.menu{ position: absolute; top:190px; left:30px; width:150px; height:300px; font-weight:bold; border:2px solid RGB(888888);} div.main{ position:absolute; top:190px; left:200px; width:600px; height:auto; border:2px solid RGB(888888);}

    • ベストアンサー
    • HTML
  • phpのランダム表示

    main.php.main2.php.main3.phpにsub.phpをincludeしているのですが、sub.phpの中でいまは単体で画像を表示している状態です。 今回、実装したいのはsubの中にdiv class="random"を設定しその中にphpで画像を1.2.3のどれかをランダムで表示したいです。 ユーザーからはmain1.2.3.phpに表示している画像が見ているページごとに変わるよう実装したいです。 subのコードをどう書けばいいですか?

    • ベストアンサー
    • PHP
  • phpでhtmlを取り出すには

    こんにちは。phpを勉強中なのですが質問があります。 phpでhtmlソースを取り出したいのですが、htmlソース(内容はdiv~/divで囲んだソース)はどのように保存すれば良いでしょうか? htmlソースなのですが大量にありまして、そのソースごと並び替えをしてhtmlを表示したいのですが・・。 今自分で作ってみたのは、単純にテキストファイルにhtmlを書いて、phpで並び替え、テキストファイル読み込み表示するという方法なのですが、とりあえずは上手くできたのですが、この方法ですとテキストファイルが大量にできてしまいます。 初心者のサイトではデータはmysqlのデータベースを使う・・とあったので同時にmysqlを少しさわってみたのですが、例えばデータベースの値の所にhtmlのソースを放り込むという事なのでしょうか? 作りたいのはゲームのレビューサイトなのですが可能であれば日付順などボタン一つで並び変えたいのです。(div~/divで囲んだソースごと並び変えたい。div~/divの中には自分のレビューやら画像が入ります) htmlとphpを覚え始めたばかりで、よく分からないのですが通常みなさんはhtmlファイルは何に格納するのでしょうか?

    • ベストアンサー
    • PHP
【EF-12】勝手に電源がつく
このQ&Aのポイント
  • EF-12で電源が勝手につく問題が発生しています。
  • 一度電源を消したのに、しばらく時間がたつと自動的に電源がついてしまいます。
  • この問題に関する解決策や対処方法について教えてください。
回答を見る