5

Facebook、Twitter、おいしい共有リンクを使用する Web サイトがあります。それらには、共有したいウェブサイトの URL エンコードされた URL が含まれています。問題は、php リダイレクト ページを介して facebook/twitter/delicious の URL を送信することです。

エンコードされた URL 内で URL をエンコードすることはできますか? 副作用はありますか?

私の質問を簡単にするために:

www.website.com/redirect.php?url=" URLENCODED (http://www.facbook.com/sharer.php?t='URLENCODED(title)'&u='URLENCODED(http://www.hotel.com)')
4

5 に答える 5

9

パーセント エンコーディングを使用して文字列を複数回エンコードし、同じ回数デコードすることで元の値を取得できます。

$str = implode(range("\x00", "\xFF"));
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str)))))));

ここでは、 の値が$str3 回エンコードされ、3 回デコードされます。その繰り返しのエンコードとデコードの出力は、 の値と同じです$str

だからこれを試してください:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com'))
于 2010-03-12T14:06:31.120 に答える
3

URL は何度でも再帰的にエンコードできるはずです。/ のような文字を繰り返しエンコードすると、次のようになります。

0: /
1: %3F
2: %%3F
3: %%%%3F

于 2010-03-12T14:07:57.230 に答える
1

URLEncoding の 2 層目を追加しても問題ありません。URLEncoding の考え方は、サーバーがテキスト文字列に含まれる特殊文字を誤って解釈するのを防ぐことです。ただし、受信側のスクリプトは urlencode() の追加レイヤーを想定し、それに応じて動作する必要があります。

または、文字列が urlencode されていることがわかっている場合は、そのまま渡すことはできませんか? それ以上の urlencoding は必要ありません。

于 2010-03-12T14:07:38.417 に答える
0

または、タイトルと URL を urldecode してから、文字列全体を urlencode します。

于 2010-03-12T14:09:28.273 に答える
0

前述のように、URL は好きなだけエンコードできますが、URL データをエンコードする回数が増えるほど、長さが 2 倍になる可能性があることを知っておく必要があります。長すぎるとユーザーにとって迷惑になります。また、一部のブラウザでは URL の長さに制限がある場合があります。また、サーバー側では、データのエンコードとデコードのオーバーヘッドが発生します。つまり、複数回エンコード/デコードする前に、それが必要であることを本当に確認する必要があります。

于 2010-03-12T15:21:26.900 に答える