爲了修復一個漏洞IE9我不得不把「DOCTYPE」聲明,在頁面的頂部:!需要調用之前<!DOCTYPE HTML的session_start()......等
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
require_once 'navBar.php';
?>
通過將DOCTYPE放在文件的頂部,我修復了一個IE9的錯誤。
IE9中的'錯誤' - 沒有文件頂部的DOCTYPE - 任何具有內嵌塊樣式的div都將忽略內嵌塊樣式,並且會垂直堆疊。
我在頁面上有3個div,內嵌塊風格,在Firefox和Android瀏覽器中,內嵌塊的3個div出現在水平從左到右的一行上。
但在IE9中,我不得不添加DOCTYPE作爲第一行(不是第二行,不是在頂部的php部分之後 - DOCTYPE必須是第1行)。
然後,只有這樣IE9才能兌現內聯塊風格。
問題是 - 在navbar.php裏我打電話給session_start()。
如您所知,session_start()也必須是任何瀏覽器輸出發送前的第一行。 否則你會得到一個errmsg。像這樣:
Warning: session_start() [function.session-start]: Cannot send
session cache limiter - headers already sent (output started at
/homepages/42/d329883313/htdocs/ourSite/landing_page.php:2) in
/homepages/42/d329883313/htdocs/ourSite/navBar.php on line 1
(PS我的IDE將文件保存爲UTF-8,因此BOM不是問題,我已經檢查 - 我沒有DOCTYPE結束之間的任何額外的空格。而在session_start的start()方法無論是在session_start()是因爲DOCTYPE送點東西給瀏覽器的破壞)
我的問題:。
我怎樣才能讓我的內聯區塊及DOCTYPE和在session_start()?
簡單UI風格的功能正在將兩個「必須在線-1」 代碼元素相互對抗(DOCTYPE和session_start),這很糟糕。
你有沒有嘗試把<?php session_start(); ?>在頁面頂部沒有多餘的空格? PHP是服務器端,HTML是客戶端,所以在IE9解釋頁面之前PHP應該已經消失。 – 2012-04-12 03:34:39
如果<?php出現在DOCTYPE之前,那麼IE9將忽略頁面上div中的內嵌塊。 DOCTYPE **必須**位於文件的頂部。我理解你的推理。但是,當我把DOCTYPE放在關閉位置之下?>沒有空白時,IE9會忽略我的內嵌塊樣式。不知道爲什麼。在處理完PHP之後,Web服務器可能會在頁面的頂部放置一些東西,我不知道。 – wantTheBest 2012-04-12 03:41:53
夠公平的,但是當你說你試着把它放在後面時,你的意思是在require_once之後還是在session_start之後(自己)? – 2012-04-12 03:46:53