我正在使用CURL
来抓取这样的网站:
<?php
$url = "http://www.bbc.com/news/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
$curl_scraped_page = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1http://www.bbc.com/news/$2$3', $curl_scraped_page);
echo $curl_scraped_page;
?>
正如您所看到的,URL
已设为BBC新闻。但是,我希望URL
成为变量。变量必须是parent.document
的值。例如,在JQuery
我会这样做:
var value = $("input", parent.document.body).val();
如何在PHP
中设置类似的内容?我用谷歌搜索但我在PHP中找不到关于parent.document
的任何内容。
答案 0 :(得分:1)
PHP
是服务器端脚本语言,因此无权访问当前的HTML
页面。它是在HTML
发送到客户端浏览器之前处理的,因此在处理脚本时甚至不存在parent.document
。
如果您想将HTML
页面中的数据传递到PHP
脚本,可以使用HTML
<form>
或JavaScript
来执行此操作/ JQuery
AJAX
请求。
例如,以下代码会将input
的值传递给PHP
脚本:
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function pass(){
var value = $("input", parent.document.body).val();
$.ajax({
type: "POST",
url: "myscript.php",
data: { mydata: value }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
}
</script>
</head>
<body>
<input type="text" />
<button onclick="pass();return false;">Pass Value</button>
</body>
</html>
修改后的脚本(myscript.php):
<?php
$url = isset($_POST['mydata']) ? $_POST['mydata'] : '';
$curl_scraped_page = '';
if(!empty($url)){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
$curl_scraped_page = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1'.$url.'$2$3', $curl_scraped_page);
}
echo $curl_scraped_page;
?>
我建议使用$(id)来检索<input>
而不是$("input",context)
的值。
E.g。
var value = $('#txt').val();
在HTML
:
<input type="text" id="txt" />
有关JQuery.ajax
的更多信息,请参阅here。