处理长URL

时间:2012-11-27 15:58:10

标签: php html http

我有一个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获取实际所需网页的网址,或者确实存在更好/更简单的方式应该这样做?

3 个答案:

答案 0 :(得分:3)

为什么要生成如此荒谬的长URL?在这一点上,你显然错过了更好的解决方案,如会话。

如果我们只想在解决方案上打一个绑带:

  1. 将一个表单写入包含数据的隐藏字段的页面,然后将表单链接POST。
  2. 与#1相同,但使用javascript。
  3. 稍微好一些:获取您要传递的任何数据并通过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>";