3

我正在 iframe 中加载页面。这是我正在使用的代码:

文件:iframe_load.html

<?php echo 'URL = '.$_REQUEST['url']; ?>
<iframe width="1015px" id="article_frame" src="<?php echo $_REQUEST['url']; ?>" style="border:0 none;"  height="576px" sandbox="allow-scripts"></iframe>

如果我在浏览器中浏览此网址:

http://mywebsite.com/iframe_load.html?url=http://www.northjersey.com/r?19=961&43=515347&44=234450391&32=4497&7=309037&40=http%3A%2F%2Fwww.northjersey.com% 2Fnews%2FSecret_bunker_under_Prague_hotel_opens_to_public_.html&nid=4306612

然后 $_REQUEST['url'] 只显示部分值。所以我的 iframe 没有显示实际的页面内容。请帮我。

在此处输入图像描述

4

4 回答 4

2

让我简化该 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 拆分字符串的方式:

  1. url=http://theirsite.com/index.php?a=1&
  2. 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。

于 2013-12-11T12:52:06.203 回答
0

请按以下方式进行:

$datum = parse_url($_SERVER['REQUEST_URI']);   /*use this if you want to get current page path*/
$test = "http://mywebsite.com/iframe_load.html?url=http://www.northjersey.com/r?19=961&43=515347&44=234450391&32=4497&7=309037&40=http%3A%2F%2Fwww.northjersey.com%2Fnews%2FSecret_bunker_under_Prague_hotel_opens_to_public_.html&nid=4306612";
$datum = parse_url($test);
print_R($datum['query']);
于 2013-12-11T12:57:01.337 回答
0

这是一个简单的解决方案:

url 编码 url 变量之后的部分而不是整个 URL,您需要在 URL 实际起源的位置而不是解析它的位置进行更改:

$url_param_val = urlencode("http://www.northjersey.com/r?19=961&43=515347&44=234450391&32=4497&7=309037&40=http%3A%2F%2Fwww.northjersey.com%2Fnews%2FSecret_bunker_under_Prague_hotel_opens_to_public_.html&nid=4306612");

$new_url = "http://mywebsite.com/iframe_load.html?url=".$url_param_val;
于 2013-12-11T13:34:52.090 回答