如果之前有人问过这个问题,请提前道歉。我确实在网上发现了一些类似的问题,但我仍然无法找出答案。你可以说我从来没有处理过基本HTML以外的任何事情。因此,任何帮助将不胜感激。
我有一个HTML文件(比如文本.html(仅供个人使用。在文件中,将有一个用于输入文本的输入框和一个提交按钮。我希望如果我单击提交,它会根据输入文本从外部网页打开一个特定的超链接。我想这就像谷歌的"我感到很幸运"。
示例:如果用户输入"测试"并单击"提交",则应从页面"https://www.google.com/search?q=test"打开第二个结果
这是我的 HTML:
<!DOCTYPE html>
<html>
<body style="background-color:beige">
<h1 style="text-align:center"><font size="14">Test</font></h1>
<style type="text/css">
</style>
<form id="form">
<div align="center" style="vertical-align:bottom">
<input type="text"
value="Test"
id="input"
style="height:50px;width:200px;font-size:14pt;">
</div>
</form>
<TABLE BORDER="0">
<TD><button class="button" id="button01">SUBMIT</button></TD>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#button01').click(function(e) {
var inputvalue = $("#input").val();
window.open("https://www.google.com/search?q="+inputvalue);
});
</script>
另外,以下是我要打开的超链接所在的页面中的div 元素的示例:
<div id="XYZ" class="contentEditValue" style="float:left;width:180px;">
<a href="2nd result link from google search" target="_self" title="2nd result">2nd Result</a>
</div>
我已经读到它可以用PHP或Jquery来实现,但它们不是我曾经做过的事情。提前非常感谢您的任何帮助!
也欣赏任何其他选择。
由于安全性,您不应该这样做。如果可以(从iframe,其他浏览器窗口读取内容......(,攻击者可以将JS键盘记录器添加到您的网上银行登录名或在Facebook上阅读您的消息。CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS( 用于阻止这些请求,如果网站没有明确说明您可以对其内容执行某些操作,则大多数浏览器将不允许您这样做。
您缺少关闭ready()
函数的});
<script type="text/javascript">
$(document).ready(function(){
$('#button01').click(function(e) {
var inputvalue = $("#input").val();
window.open("https://www.google.com/search?q="+inputvalue);
});
});
</script>
下面是如何在 PHP 中执行此操作的基本示例。
把JavaScript/JQuery排除在外,假设你有一个基本的形式:
<form>
<input type="text" value="Test" name="input">
<input type="submit">
</form>
如果不在<form>
标记上指定action
或method
属性,表单将向其所在页面的 URL 发出 HTTP GET 请求,因此在本例中,PHP 代码将与表单位于同一页面上。如果您有兴趣,以下是发送表单数据的更详细说明。
现在您已经有了将输入传递给 PHP 脚本*的方法,这个问题有三个基本部分。
使用包含输入的查询字符串向所需页面发出请求
http_build_query
是构造正确编码的查询字符串以用于请求的简单方法。对于此示例,我们将使用file_get_contents
发出请求。还有其他方法可以做到这一点,包括cURL,但让我们保持简单。$query = http_build_query(['q' => $_GET['input']]); $page = file_get_contents('http://www.example.com/?' . $query);
在这个例子中,我没有使用 Google,因为在响应中找到正确的链接并遵循它们有点复杂。(部分原因是他们并不真的希望你这样做。
在响应中找到所需的链接
不要尝试使用正则表达式在响应中找到链接。你会遇到问题,回到 Stack Overflow 尝试解决这些问题,人们会告诉你你不应该使用正则表达式,所以只需跳过该部分并使用 DOM 解析器。
$doc = new DomDocument; $doc->loadHTML($page); $links = $doc->getElementsByTagName('a'); $url = $links[0]->getAttribute('href');
我用
getElementsByTagName()
来查找链接,但如果页面更复杂,xpath 查询会更好。另外,我使用了第一个链接($links[0]
(,因为它只有一个链接 example.com。 如果存在,$links[1]
会得到第二个链接。点击链接
header("Location: $url"); exit;
如果一切顺利,你最终会到达你想去的地方。但是有很多事情可能会出错。如果你请求的资源是你无法控制的,它可以随时更改,而不会向你发出任何预先警告,因此找到链接的代码可能会停止工作。您可能会被阻止提出请求。从这样的网站上抓取链接违反了许多网站的服务条款,因此请事先检查一下。您可能会发现该站点提供了一个 Web API,这应该是访问其内容的更好方式。
*您实际上并不需要表单;您只需将URL中的输入参数传递到您的页面即可。