让我简化该 URL 以进行演示:
http://yoursite.com/iframe_load.html?url=http://theirsite.com/index.php?a=1&b=2
请注意,他们网站的 URL 也包含一个查询字符串 ( index.php?a=1&b=2
)。因为 URL 包含&
,这就是 PHP 拆分字符串的方式:
url=http://theirsite.com/index.php?a=1
&
b=2
如您所见,url
现在只包含 URL 的一部分,而不是完整的 URL(因为它被分割了&
)。
该&
标志过早地“破坏”了 URL,因此您必须将其替换为不会破坏 URL 的东西。
您必须向 iframe_load.html 传递一个编码 URL,以防止 PHP 错误解释 URL:
http://yoursite.com/iframe_load.html?url=http%3A%2F%2Ftheirsite.com%2Findex.php%3Fkey1%3Dval1%26key2%3Dval2
(看到后面的部分iframe_load.html?url=
不包含任何?
或&
不再包含)
如果您从另一个页面链接到iframe_load.html,您可以使用 PHP 的函数urlencode()
为您执行此操作:
一些链接到 iframe_load.html 的页面
<?php
// create a variable with the URL
// this is the normal URL, we will encode it later, when we echo it.
$other_websites_url = 'http://theirsite.com/index.php?key1=val1&key2=val2';
?>
<a href="http://yoursite.com/iframe_load.html?url=<?php echo urlencode($other_websites_url); ?>">Click to go to iframe_load.html</a>
<?php // ^ see, here we urlencode the URL, just before we paste it inside our own URL.
使用urlencode()
,将 URL 中的特殊字符(例如&
)更改为 HTML 实体,因此它们(暂时)失去其含义,并且不会破坏 URL。不用担心,当您在 iframe_load.html 中访问 URL 时,该 URL 将被解码,因此您将获得 iframe 的正确 URL。
这是他们网站的 URL 编码后的样子:http%3A%2F%2Ftheirsite.com%2Findex.php%3Fkey1%3Dval1%26key2%3Dval2
如您所见,&
已替换为%26
,并且其他字符也已替换。现在您可以简单地将其粘贴到您的 URL 中:
http://yoursite.com/iframe_load.html?url=http%3A%2F%2Ftheirsite.com%2Findex.php%3Fkey1%3Dval1%26key2%3Dval2
由于其他网站的 URL&
不再包含,PHP 不会拆分 URL。