2013-09-24 104 views
3

我正在加載iframe中的頁面。這是我使用的代碼: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沒有顯示實際的頁面內容。請幫幫我。

enter image description here

回答

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 (因爲它被&分割)。

&符號會'過早'破壞網址,因此您必須將其替換爲不會破壞網址的內容。

你必須通過iframe_load.html編碼URL,防止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的正確網址。

這是他們的網站的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

因爲其他網站的網址好好嘗試一下含有&了,PHP不會分裂的URL。

+0

使用** urlencode()**函數後,我得到這樣的網址: URL = http%3A%2F%2Fwww.northjersey.com%2Fr%3F19%3D961 only。 – ARUN

+0

您需要在**鏈接到iframe_load.html時使用它,而不是在iframe_load.html本身內。 –

+0

換句話說,當您訪問** iframe_load.html **時,iframe_load.html?url ='之後的URL應該已被編碼。這樣,iframe_load.html不會將URL分成幾部分。 –

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']); 
+0

它只打印** 19 = 961 ** – ARUN

+0

@ARUN我試着用字符串'$ test'。請再次檢查,無需url_encode() – Parixit

+0

@ARUN請複製我的代碼並執行它。並根據您的需要進行調整。 – Parixit

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;