0

phpリンクを生成するスクリプトがあります。これにより、値(に変更できません)などのURL非常に長い(IEが実際に処理するには長すぎます)。www.somesite.co.uk/here/query?foo=bar&bar=foo&.....somesite.co.uk getspost

だから私の中で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実際に必要なページを取得するURLに表示されるリンクはどこにlong_url_test.phpありますか、それとも実際にこれを行うためのより良い/より簡単な方法はありますか?

4

3 に答える 3

3

なぜこんなに長いURLを生成するのですか?この時点で、セッションのようなより良いソリューションを明らかに見逃しています。

ソリューションにバンドエイドを叩きたいだけの場合:

  1. データを含む数十億の非表示フィールドを含むフォームをページに書き込み、リンクをフォームにPOSTします。
  2. #1と同じですが、javascriptを使用します。

少し良い:渡したいデータを取得してbase64_encode(serialize($your_data))実行し、長さの制限に達することなくURLに埋め込むことができるかどうかを確認します。Zlibをインストール/有効にしている場合はgzcompress()、そこにスローすることもできます。

それでも、データがサーバー側にとどまる、はるかに単純で優れたソリューションがないことを想像するのは非常に困難です。

于 2012-11-27T16:10:53.563 に答える
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 に答える
0

長いURLでどのように機能するかは明確ではありませんHeader('Location:')(おそらく-IEはロケーションヘッダーで受信したURLの長さをテストできませんか?)が、すべてのパラメーターを含むこれらのURLが本当に必要になると(人々が共有できるように)、ある種のURL短縮を使用します。たとえば、パラメータのセットごとに一意のIDを作成し、実際のパラメータをデータベースに保存します。getリクエストを受け取ったら、データベースから一意の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 に答える