Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以对包含url编码url的url进行url编码?_Php_Urlencode - Fatal编程技术网

Php 是否可以对包含url编码url的url进行url编码?

Php 是否可以对包含url编码url的url进行url编码?,php,urlencode,Php,Urlencode,我有一个使用facebook、twitter、delicious share链接的网站。它们包含您希望共享的网站的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)'&

我有一个使用facebook、twitter、delicious share链接的网站。它们包含您希望共享的网站的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)')

您可以使用百分比编码对字符串进行多次编码,并通过相同次数的解码获得原始值:

$str = implode(range("\x00", "\xFF"));
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str)))))));
这里,
$str
的值被编码三次,然后被解码三次。重复编码和解码的输出与
$str
的值相同

所以试试这个:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com'))

可以添加第二层URL编码。URLEncoding的思想是防止服务器误解文本字符串中可能存在的任何特殊字符。但是,接收脚本必须期望额外的一层urlencode(),并相应地执行操作


或者,如果您知道字符串已经过URL编码,您就不能按原样传递它吗?不需要进一步的URL编码。

您应该能够对URL进行任意多次的递归编码。如果对字符进行类似/重复的编码,您将得到:

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

等等。

或者只对标题和URL进行URL解码,然后对整个字符串进行URL编码。

如前所述,您可以随心所欲地对URL进行编码,但您应该知道,对URL数据进行编码的次数越多,长度增加的次数越多,长度可能会增加两倍。如果太长,会让用户感到厌烦。在某些浏览器上,url长度也可能有限制。 在服务器端,还将有一个开销编码和解码数据。
简言之,在多次编码/解码之前,您应该真正确定自己需要它。

我知道如何做。。。我只是担心url编码一个url编码的url可能会导致它在重定向页面被解码整个url。。。那么,我是否可以假设嵌套url编码可以正常工作呢?正如@Gumbo所说:“您可以对url进行多次编码,并在解码相同次数时获得原始值。”。每次编码时,以前的所有编码部分都被编码again@Mark:因此,如果您仍然感到困惑,不,重定向URL不会解码整个URL,它只会删除一个“级别”的编码。换句话说,你的计划是合理的。要理解递归,首先必须理解递归。encode(“?”)=%3F。同样,当递归编码时,唯一再次编码的部分是“%”,因此它更像“%2525253F”,其中decode(“%25”)=%