2012-04-12 49 views
0

爲了修復一個漏洞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),這很糟糕。

+0

你有沒有嘗試把<?php session_start(); ?>在頁面頂部沒有多餘的空格? PHP是服務器端,HTML是客戶端,所以在IE9解釋頁面之前PHP應該已經消失。 – 2012-04-12 03:34:39

+0

如果<?php出現在DOCTYPE之前,那麼IE9將忽略頁面上div中的內嵌塊。 DOCTYPE **必須**位於文件的頂部。我理解你的推理。但是,當我把DOCTYPE放在關閉位置之下?>沒有空白時,IE9會忽略我的內嵌塊樣式。不知道爲什麼。在處理完PHP之後,Web服務器可能會在頁面的頂部放置一些東西,我不知道。 – wantTheBest 2012-04-12 03:41:53

+0

夠公平的,但是當你說你試着把它放在後面時,你的意思是在require_once之後還是在session_start之後(自己)? – 2012-04-12 03:46:53

回答

0

解決方案是從require_once'somefile.php';

require_once( 'somefile.php');儘管Firefox和Android瀏覽器在第一種風格下都很好,但IE9有一個怪癖:它會忽略div的內聯塊風格。

相關問題