我正在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>
在我的浏览器中,如果我浏览此网址:
然后$ _REQUEST ['url']只显示部分值。所以我的iframe没有显示实际的页面内容。请帮帮我。
答案 0 :(得分:2)
让我简化该URL以用于演示目的:
http://yoursite.com/iframe_load.html?url=http://theirsite.com/index.php?a=1&b=2
请注意,他们网站的网址也包含查询字符串(index.php?a=1&b=2
)。因为URL包含&
,所以这就是PHP拆分字符串的方式:
url=http://theirsite.com/index.php?a=1
&amp; b=2
如您所见,url
现在只保留网址的一部分,而不是完整的网址(因为它被&
拆分)。
&
符号'过早地中断了网址,因此您必须将其替换为不会破坏网址的内容。
您必须将iframe_load.html传递给已编码的网址,以防止PHP误解网址:
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中访问该网址时,该网址会被解码,因此您将拥有iframe的正确网址。
这是他们网站的网址在编码时的样子:http%3A%2F%2Ftheirsite.com%2Findex.php%3Fkey1%3Dval1%26key2%3Dval2
如您所见,&
已替换为%26
,其他字符也已被替换。现在您只需将其粘贴到您的网址中即可:
http://yoursite.com/iframe_load.html?url=http%3A%2F%2Ftheirsite.com%2Findex.php%3Fkey1%3Dval1%26key2%3Dval2
由于其他网站的网址不再包含&
,因此PHP不会拆分该网址。
答案 1 :(得分:0)
答案 2 :(得分: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']);
答案 3 :(得分: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;