PHPでHTMLタグの内容を抽出する方法

このQ&Aのポイント
  • jqueryを使用して、PHPにURLを渡して、そのURLの中のtitleタグの内容を抽出する方法について説明します。
  • コードの問題点として、レスポンスが帰ってこないことがあります。詳細な情報が必要です。
  • この質問にはPHPの正規表現を使用してHTMLタグの内容を抽出する方法が求められています。
回答を見る
  • ベストアンサー

PHPの正規表現でHTMLタグの内容を抽出したい

jqueryでPHPにurlを渡して、そのurlの中のtitleタグの内容を抽出したいと思ってます。が、うまく行きません。 ●jquery↓ <script type="text/javascript"> function site_check(){ var url = $("#url0").val(); if(url=="") return; $.getJSON("test.php?url=" + encodeURI(url) ,function(res){ $("#title").html(res.title); }); } </script> ●test.php↓ $html=file_get_contents($_GET["url"]); preg_match_all("/<title>(.*?)<\/title>/i",$html,$html_title); header('Content-type: application/json'); echo json_encode($html_title); このコードではなにもレスポンスが帰って来ません。 もし足りない情報がありましたらご指摘ください。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いくつかまずそうな感じですが・・・ まず$html=file_get_contents($_GET["url"])で本当に$htmlが返しているか? 正規表現はpreg_match_allしていますがタイトルが二重に宣言されているものを 考慮する必要はありますか?簡潔にこんな感じでも・・・ $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$html_title); 戻すのは$html_title[0]でよいでしょう。 以下テスト <? $html=<<<eof <html> <head> <title>test head</title> </head> <body> body test </body> </html> eof; $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$html_title); print $html_title[0]; ?>

shintaaarooo
質問者

お礼

ありがとうございます、以下のコードで試しましたところ、成功しました。 <?php $html=mb_convert_encoding(file_get_contents('http://www.yahoo.co.jp/'), 'UTF-8', 'auto');; $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$html_title); echo $html_title[0]; ?> titleタグは1つだけですもんね。

関連するQ&A

  • HTMLをPHPでJSONにして返すには

    jqueryでurlをPHPに送って、そのurlのhtmlファイルから、titleタグやh1タグの内容を抽出し、連想配列に格納。そして、その連想配列をJSON形式にしてjqueryに返し、htmlにレンダリングしたいのですが上手くいきません。 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> function site_check(){ var url = $("#url").val(); if(url=="") return; $.getJSON("test.php?url=" + encodeURIComponent(url) ,function(res){ $("#title").html(res.title); $("#h1").html(res.h1); }); } </script> </head> <body> <div class="form"> URL <input type="text" id="url" value="" style="width:300px;" onfocus="this.select()" onkeypress="if(event.keyCode==13) site_check()" /> <button onclick="site_check()" />チェック</button> </div> title:<span id="title"></span></br> h1:<span id="h1"></span> </body> test.php↓ <?php $html=mb_convert_encoding(file_get_contents($_GET['url']), 'UTF-8', 'auto'); $array = array(); $pattern = "/(?<=<title>).+?(?=<\/title>)/mis"; preg_match($pattern,$html,$array['title']); $pattern = "/(?<=<h1>).+?(?=<\/h1>)/mis"; preg_match($pattern,$html,$array['h1']); header("Content-Type: application/json; charset=UTF-8"); echo json_encode($array); ?> このコードだと、test.phpからは、[object Object]と、レスポンスが返ってきてしまいます。

    • ベストアンサー
    • PHP
  • getJSONで受け取れるよう出力するには?

    ■前提 ・$.getJSONでAPIからデータ取得するサンプルがあります ・この時、第1引数のURLを叩くと、データが表示されます $.getJSON('http://hoge … &callback=?') .error( ajaxError ) .success(function( data ){ ・動作確認のため、「第1引数のURLで表示されたデータ」を取得(コピペ)して、「piyo.php」としてアップロードしてみました ■質問 ・$.getJSON第1引数を「piyo.php」へ変更すると、同じようにデータ取得できると思ったのですが、うまくいきません ・何故でしょうか? ・「json値」をサーバが返すようにすれば良いのでしょうか? ・それはどうやるのでしょうか? ・「echo json_encode?」「header('Content-Type:?」それとも、拡張子がjsonじゃないといけないのでしょうか?

    • ベストアンサー
    • AJAX
  • JSONデータをjQueryにわたす際に文字化け

    MySQLからのデータをPHPでJSON形式に加工して、jQueryで表示させようしているのですが、 どうしても日本語だけ文字化けをしてしまい、エンコードを色々変えても文字化けしてしまい困っています。 どなたか助けていただけませんでしょうか? -文字化け結果- No:1 Title:¤Ç¤­¤¿¡ªÂçÀ®¸ù¡ª No:2 Title:¤³¤ì¤«¤é´èÄ¥¤ë¡ª phpにアクセスしても文字化けはいたしません。 jQueryからアクセスをすると完璧に文字化けをしてしまいます。 json.php (UTF-8) [ { no: "1", title: "できた!大成功!" }, { no: "2", title: "これから頑張る!" } ] index.html (UTF-8) <!DOCTYPE HTML> <html> <head> <meta charset="euc"> <title>jsonテスト</title> <link rel="stylesheet" type="text/css" href="style/desktop.css"> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.7.1");</script> <script type="text/javascript"> jQuery(function(){ $.getJSON("./json.php",function(data){ $('p','#demo').remove(); $('#demo').append('<ul/>'); $.each(data,function(i,items){ $("<li/>",{ text:'No:'+items.no+' Title:'+items.title }).appendTo('ul','#demo'); }); }); }); </script> </head> <body> <div> <div id="demo"> <h4>リスト</h4> <p></p> </div> </div> </body> </html>

  • $.getJSONで複数のJSONを取得する

    $.getJSON("jsonGet.php", function (result) { でJSONファイルをゲットしています。 質問「もし2つ以上のJSONファイルが必要な場合、 どのように記述すればいいのでしょうか?」 $.getJSON("jsonGet1.php", function (result1) { $.getJSON("jsonGet2.php", function (result2) { } } のように入れ子にするのでしょうか? $.getJSON命令1つで複数のJSONファイルをリターンすることは不可能でしょうか? ロジック上、2つのJSONファイルを取得してから処理を継続します。 通常、どのようにコーディングするのか教えてください よろしくお願いします。

  • $.getJSONにJSON.stringifyを

    $.getJSONに、JSON.stringifyした結果を指定したいのですが、どうすればよいでしょうか? ■現状 ・コンソールにJSONは出力されているのですが、$.getJSONでこのファイルを指定しても、画面真っ白です ▼index.html <script type="text/javascript" src="hoge.json"></script> <script type="text/javascript"> $.getJSON('hoge.json', function(data) { ▼hoge.json var obj =([ [略], ]); var json_text = JSON.stringify(obj); // テスト出力 console.log(json_text); ■質問 ・$.getJSONにこの出力結果(json_text)を指定するためには、どうすれば良いでしょうか? ・一旦ファイル出力しなければいけないのでしょうか? ・どうやるのでしょうか? ・AJAXでサーバ側へデータを渡してファイル出力した後、$.getJSONでその出力したファイルを指定するしかない?

  • コールバック関数が動かない

    Ajaxでサーバ通信を試みています。 Javaは少しわかるんですが、JvascriptやjQueryはサッパリちんぷんかんぷんな状態です。 今、ボタンクリックで「doAction()」を呼んで、Javaのクラス「/greetinglist」に キーワード「id」を渡して検索結果を受け取って表示しようとしています。 function doAction() は働いて、Java側の検索もできてるんですけど、そこで終了してしまいます。 コールバック関数「function callback(resp)」が動いてくれません。 FireBugで動きを追っていますが、特にエラーはないようです。 「function doAction()」 はjQueryを使っていますが、「function callback(resp)」はJavaScript だという認識です。 <script type="text/javascript" src="js/datastore.js"></script> <script src="/js/jquery-1.7.2.min.js"></script> <script type="text/javascript"> //<![CDATA[ function doAction(){ var id = $('#month').val(); console.log("id==========" + id); $.getJSON('/greetinglist',{id:id},callback,"json"); } function callback(resp){ var json = eval(request.responseText); var res = ''; for (var i = 0;i < json.length;i++){ res += '<td>' + json[i].month + '</td>' + '<td>' + json[i].tenDays + '</td>' + '<td>' + json[i].greeting + '</td>' + '<td><a href="greetingdetail.html?id=' + json[i].id + '">詳細</td>'; } var obj = document.getElementById("datatable"); obj.innerHTML ='<tr><td>id</td><td>月</td><td>旬</td><td>文章</td><td>編集</td></tr>' + res; console.log("res==========" + res); }

  • jQueryでHTML表示の部分

    jQueryで表示されるデータをHTMLで表示するのですが、 色々いじっていたのですが、表示されなかったり<li>タグだけしかひょうじされなかったりして、 いまいちわからなくて、質問を致しました。 -現在の表示------------ <li>No:1 Title:タイトル</li> ----------------------- <li>タグの中にclassを追加したいのですが、 どうすれば、<li>タグにclassが追加されるのでしょうか。 ----------------------------------- <li class="test">No:1 Title:タイトル</li> ----------------------------------- こんな感じに表示させたいのです。 大変申し訳ございませんが、よろしくお願い致します。 <script type="text/javascript"> jQuery(function(){ $.getJSON("./json_sql.php",function(data){ $('p','#demo').remove(); $('#demo').append('<ul/>'); $.each(data,function(i,items){ $("<li/>",{ text:'No:'+items.no+' Title:'+items.title }).appendTo('ul','#demo'); }); }); }); </script> <div id="demo"> <h4>リスト</h4> </div>

  • PHPでの正規表現について

    こんにちは。最近、正規表現の勉強を始めました。 以下のプログラムをテストしているのですが、思ったとおりに動かずに困っています。 (1)円マークにヒットしない (2)行頭の”今日”にヒットしない(この場合2と4行目にヒットするのでは?) 何がおかしいのか、アドバイスをいただけませんか? <html> <head> <title>正規表現のテスト</title> </head> <body> <pre> <?php $post = '\750 今日は晴れです。今日は晴れです。今日は晴れ です。今日は晴れです。今日は晴れです。今日は晴れです。 今日は晴れです。今日は晴れです。今日は晴れ です。今日は晴れです。今日は晴れです。今日は晴れです。'; function my_insert_post($post){ global $post; preg_match_all("/\\/", $post, $matches);//(1) print_r($matches); preg_match_all("/^今日/", $post, $matches02);//(2) print_r($matches02); echo "<hr />"; print_r($post); } my_insert_post(); ?> </pre> </body> </html> どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Ajax・jQueryでGET時にIEで文字化け

    Ajax・jQueryで日本語をGETするとき、IEで文字化けします。 (Firefox,chromeでは文字化けは起こりません。IE6/7/8で確認すると文字化けします) どのようにしたら文字化けが起こらなくなるか教えていただければと思います。 環境 PHP:5.1.6 サーバー・HTMLの文字コードはUTF-8 下記のようなリンクを作り、「jquery.url.js」でパラメータを取得しています。 <a href="./test.php?keyword=テスト&cate=1"> (実際には下記のソースに示しますが、テストの文字はurlencordしています。) 【javascript部分】 <script type="text/javascript" src="jquery.url.js"></script> <script type="text/javascript"> $().ready ( function() { $('#sample-get').find('a').click ( function() { var url = $.url ( $(this).attr('href') ); $.ajax ({ type: 'GET', url: 'send.php', cache: false, data: url.attr ( 'query' ), success: function ( data, dataType ) { $('#test').html ( data ); }, error: function ( XMLHttpRequest, textStatus, errorThrown ) { this; alert('Error : ' + errorThrown); } }); return false; }); 【HTML(PHP)部分】 $keyword='テスト'; $keyword=urlencord($keyword);//urlエンコード echo<<<EOF <div id="sample-get"> <a href="./test.php?keyword=$keyword&cate=1"><img src="images/sample1.png" alt="sample1" height="200" width="200"></a> </div> EOF; 【PHP部分(send.php)】 <?php echo $_GET['keyword']; echo urldecord($_GET['keyword']); echo $_GET['cate']; ?>

    • ベストアンサー
    • AJAX
  • 別URLからのJSON取得がうまくいかないので教えてください

    楽天書籍検索APIをJSONで取得したいのですが、うまく表示されません。 以下のソースで何がまずいか教えていただけますでしょうか。 ※[YOUR_developerID]にはIDが入っているものとします <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>JSON</title> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.2.6");</script> <script type="text/javascript"> $(function(){ $.getJSON("http://api.rakuten.co.jp/rws/2.0/json?developerId=[YOUR_developerID]&operation=BooksTotalSearch&version=2009-03-26&keyword=%E3%82%AC%E3%83%B3%E3%83%80%E3%83%A0&sort=-releaseDate", function(jsonData){ $(jsonData.Body.BooksBookSearch.Items.Item).each(function(){ $("body").append(this.title+"<hr />"); }) }) }) </script> </head> <body>

専門家に質問してみよう