dポイントプレゼントキャンペーン実施中!

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);

このコードではなにもレスポンスが帰って来ません。
もし足りない情報がありましたらご指摘ください。

A 回答 (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];
?>
    • good
    • 0
この回答へのお礼

ありがとうございます、以下のコードで試しましたところ、成功しました。
<?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つだけですもんね。

お礼日時:2010/11/29 16:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!