2011-03-29 17 views
0

我有一個腳本,在ie6(包括ie7和ie8)之外的所有瀏覽器中都能正常工作。 有沒有半可靠的方法可以排除這個邪惡的瀏覽器。從php中排除ie6 include

我已經試過這樣:

<!--[if !IE 6]> 
<?php include("fconditionals.php"); ?> 
<![endif]--> 

這:

$user_agent = getenv("HTTP_USER_AGENT"); 
if (preg_match("MSIE 6", $user_agent)) 
{ 
include("fconditionals.php"); 
} 
+1

...你有* PHP腳本*在IE中失敗? PHP不關心瀏覽器。發生什麼事情,有條件的評論是不夠的? – cHao 2011-03-29 12:53:51

+0

不 - 這不是在php中失敗的php腳本 - php爲jquery腳本設置條件,在ie6中也不會失敗,但是不是很好,我寧願添加其他東西CSS。 – Gertruder 2011-03-29 13:06:36

回答

1

您嘗試的第一件事(條件註釋)將無法工作,因爲包括在服務器上完成,而正在生成的頁面和條件註釋只能通過瀏覽器檢查的頁面已經被下載後。

有條件的評論將被顯示在IE6排除生成的代碼,但它仍然會被服務器上運行。

此外,在你使用他們在這裏也將排除所有非IE瀏覽器中顯示的驗證碼格式的條件註釋。如果您只想影響IE,則需要重新格式化它,以便其他瀏覽器不會將內部代碼視爲註釋,方法是使用<![if !IE 6]>語法而不是<!--[if !IE 6]>

該方法仍然不會停止在服務器上運行代碼。

您嘗試的第二種方法更可能與您實際想要做的更接近。但是,請注意,儘管PHP確實收到了USER_AGENT字符串,但在大多數瀏覽器中可能會欺騙USER_AGENT,並且一些隱私/安全產品會像一些Web代理一樣主動移除它。換句話說,USER_AGENT字符串不是確定某人使用的瀏覽器的100%可靠方式。

也就是說,如果你有,你想從只對IE6正在執行exlude具體的PHP代碼,那麼它可能是唯一可行的解​​決方案。

這個不適合你的原因是你的代碼包括只有IE6而不是不包括它。您需要在preg_match()之前添加「不」運算符(!)。

順便說一句:在你的示例代碼,你有$user_agent = getenv("HTTP_USER_AGENT");。值得指出的是,$_SERVER['USER_AGENT']已經作爲一個變量可用,您不需要使用getenv()。

+0

感謝您的回覆。通過jquery獲取或加載php是否可靠,然後在js上使用條件語句來排除ie6?最終的腳本是jQuery,所以如果用戶沒有激活jqueruy,他們將無法看到這種效果...... – Gertruder 2011-03-29 13:36:33

+0

@Gertruder - 說實話,看過上面的評論,你更好的選擇是做Javascript中的瀏覽器檢測,而不是在PHP中執行有條件的東西。 JQuery有一個非常好的.browser方法,如果你需要某些代碼在特定的瀏覽器中運行,你可以使用它。 PHP不是做這類事情的最佳地點。 – Spudley 2011-03-29 13:41:39

+1

好的謝謝Spudly,我終於得到它的工作使用:<! - [if!IE 6]> 代碼<! - 纏繞js代碼。 – Gertruder 2011-03-30 10:23:10

2

第一個版本永遠不會成功。 PHP只關心<?php ?>對,完全忽略它們之外的任何東西。 IE瀏覽器的條件註釋只能被瀏覽器使用,所以include會每次在服務器上執行。

第二個版本有逆轉的邏輯 - 你包括文件隨時檢測IE6。你會想要!preg_match。但是,請記住,用戶代理字符串受用戶控制,可以僞造/黑客入侵/被破壞。沒有100%可靠的方法來檢測遠程瀏覽器,無法以某種方式被顛覆。

1
if (!strstr($_SERVER['HTTP_USER_AGENT'],"MSIE 6") 
{ 
    include("fconditionals.php"); 
}