我有一个php
脚本生成链接,其中URL
非常长(IE到handle infact的时间太长),例如www.somesite.co.uk/here/query?foo=bar&bar=foo&.....
其中somesite.co.uk
1}} gets
值(我无法更改为post
)。
所以在我的index.php
:
echo "<a href='$url'>".$link."</a>";
一切正常,$url
的值低于页面被视为预期的限制,但是如果超过限制,页面上的数据将被截断。
我创建了这个long_url_test.php
脚本,并按照预期为$url
<?php
header('Location: $url');
?>
我需要帮助把所有这些放在一起,比如:
的index.php:
echo "<a href='long_url_test.php'>".$link."</a>"; # and POST $url to script
long_url_test.php:
<?php
$url=$_POST['url']
header('Location: $url');
?>
index.php
posts
上显示的链接显示了long_url_test.php
获取实际所需网页的网址,或者确实存在更好/更简单的方式应该这样做?
答案 0 :(得分:3)
为什么要生成如此荒谬的长URL?在这一点上,你显然错过了更好的解决方案,如会话。
如果我们只想在解决方案上打一个绑带:
稍微好一些:获取您要传递的任何数据并通过base64_encode(serialize($your_data))
运行它,看看您是否可以将其嵌入到URL中而不会遇到长度限制。如果您安装/启用了Zlib,您也可以在其中抛出gzcompress()
。
尽管如此,我仍然非常很难想象没有更简单/更好的解决方案,您的数据仍然在服务器端。
答案 1 :(得分:0)
您可以将链接设为POST而不是提交。
<a href="#" onclick="document.myform.submit()">Click me</a>
<form name="myform" action="/here/query">
<input type="hidden" name="foo" value="bar">
<input type="hidden" name="bar" value="foo">
</form>
或者如果你需要它是一个GET。但不确定这是否适用于长URL。
<a href="#" onclick="location.href='/here/query&foo=bar&bar=foo'">Click me</a>
或者您可以尝试jQuery和Ajax。我不确定这是否会奏效。
<a href="#" id="mylink">Click me</a>
<script>
$(document).ready(function() {
$("#mylink").click(function() {
$.ajax('/here/query&foo=bar&bar=foo').done(function(result) {
//do something
});
});
});
</script>
顺便说一下,某些浏览器(包括IE版本)的URL长度限制为2000。
答案 2 :(得分:0)
不清楚Header('Location:')
如何使用长网址(可能 - IE错过测试接收到位置标头的网址的长度?),但是一旦你确实需要那些包含所有参数的网址(因此它们可以被人们共享)我担心你需要使用某种URL缩短。例如,为每组参数创建唯一ID,并将真实参数保存到数据库中。收到get请求后 - 从数据库中获取唯一ID并请求params。否则,有人可能会复制URL(由于Location标题而工作正常)并与其他人共享。 long_url_test.php
不会被执行,IE将无法打开此类URL。
一旦你真的不需要这个网址可以共享 - 而不仅仅是用表单替换它:
echo "<form action=\"url without params\" method=\"POST\"><a href='#' onclick=\"this.parentNode.submit(); return false;\">".$link."</a>
<input type=\"hidden\" name=\"param1\" value=\"".$val1."\" />
</form>";