0

我有一个php生成链接的脚本,其中的链接URL很长(对于 IE 来说太长而无法处理www.somesite.co.uk/here/query?foo=bar&bar=foo&.....事实) ,例如somesite.co.uk gets(我无法更改为post)。

所以在我的index.php

echo "<a href='$url'>".$link."</a>";

对于低于限制的值,所有工作正常,$url页面被视为预期,但是如果超过限制,页面上的数据将被截断。

我创建了这个long_url_test.php脚本,它按预期加载了长值的页面$url

<?php
header('Location: $url');
?>

我需要帮助把这一切放在一起,比如:

索引.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 postsurl 上显示的链接在哪里long_url_test.php获取实际所需的页面,或者确实有更好/更简单的方法我应该这样做?

4

3 回答 3

3

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

如果我们只想在解决方案上贴上创可贴:

  1. 将表单写入带有 squillion 隐藏字段的页面,其中包含您的数据,然后使链接发布表单。
  2. 与 #1 相同,但使用 javascript。

稍微好一点:获取您想要传递的任何数据并运行它base64_encode(serialize($your_data)),看看您是否可以将其嵌入到 URL 中而不会遇到长度限制。如果您安装/启用了 Zlib,您也可以在其中添加一个gzcompress()

尽管如此,我还是很难想象没有一个更简单/更好的解决方案可以让您的数据保持在服务器端。

于 2012-11-27T16:10:53.563 回答
0

不清楚如何Header('Location:')使用长网址(可能 - IE 错过了测试使用位置标头接收的网址的长度?),但是一旦你真的需要这些带有所有参数的网址(所以它们可以被人们共享)恐怕你会需要使用某种 URL 缩短。例如,为每组参数创建唯一 ID,并将真实参数保存到数据库中。收到获取请求后 - 获取唯一 ID 并从数据库中请求参数。否则,有人可能会复制 URL(由于 Location 标头而可以正常工作)并与其他人共享。long_url_test.php不会被执行并且 IE 将无法打开这样的 URL。

一旦您真的不需要该 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>";
于 2012-11-27T16:26:48.010 回答
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 版本,有 2000 个 URL 长度限制。

于 2012-11-27T16:16:16.073 回答