2008-09-03 86 views
4

使用php include函數時,include被成功執行,但它在輸出include的輸出之前也輸出char,char的值是十六進制值3F,我不知道在哪裏它來自,雖然它似乎發生在每一個包括。PHP包含輸出未知字符的函數

起初我希望它是文件編碼,但這似乎不成問題。我創建了一個測試案例進行論證:(鏈接不再工作http://driveefficiently.com/testinclude.php這個文件只包含:

<? include("include.inc"); ?> 

和include.inc只包括:

<? echo ("hello, world"); ?> 

,然而,輸出是:「?你好,世界」哪裏?是一個隨機值的字符。這是我不知道起源的價值,它有時會讓我的網站變得有點瘋狂。

任何想法可能來自哪裏?起初我認爲這可能與文件編碼有關,但我不認爲它是一個問題。

回答

11

你們看到的是UTF-8字節順序標記:

的BOM的UTF-8表示是字節序列EF BB BF,這似乎爲ISO-8859-1的字符。我大多數文本編輯器和瀏覽器都不準備處理UTF-8。

Byte Order Mark on Wikipedia

PHP不明白,這些字符應該是「隱藏」而發送給瀏覽器,好像他們是普通字符。爲了擺脫它們,您將需要使用「適當的」文本編輯器打開文件,該文本編輯器將允許您將文件保存爲UTF-8,而不需要前導BOM。

You can read more about this problem here

0

我在您鏈接到的頁面上看到hello, world。沒有問題,我可以看到...

我使用Firefox 3.0.1和Windows XP。你在運行什麼瀏覽器/操作系統?也許這可能是問題所在。

0

字符3F其實的問號,它不僅僅是一體顯示。

我得到了與托馬斯相同的結果,沒有問號出現。

理論上它可能會有一些問題,網絡代理,但我傾向於在你的PHP標記......這或許你現在固定,所以我們看不到的問題,懷疑流浪問號。

1

它不會出現在Firefox或IE瀏覽器所呈現的頁面上,但你可以看到有趣的人物,當你查看源代碼在IE

enter image description here

這是一臺Linux機器上?你可以找到&用vim或sed來替換,看看你能否以這種方式擺脫3F?

如果它在Windows上,請嘗試使用記事本打開include.inc以查看滑稽字符是否可見&可以被刪除。

我也很想知道如果你將代碼複製到include之外並且只是單獨運行它會發生什麼。

3

您的Web服務器(或文本編輯器)顯然包括BOM到文檔中。我在瀏覽器中看不到流氓字符,除非將網站的編碼明確設置爲Latin-1。然後,我看到兩個(!)UTF-8 BOM。

/編輯:從這個事實,有兩個材料清單我得出結論,BOM實際上是由您的編輯器在文件的開頭。你用什麼編輯器?如果您使用Visual Studio,則必須在「文件」菜單中選擇「另存爲...」,然後選擇「使用編碼保存...」按鈕。在那裏,選擇「沒有BOM的UTF-8」或類似的東西。

+0

您現在可以創建一個全局設置 - 在這裏描述:https://stackoverflow.com/questions/5406172/utf-8-without-bom – 2016-05-01 20:47:59

0

我也很好奇,看看你的代碼複製出來的 的包括,只是通過自身運行什麼 發生。

馬克:這是在一個共享的託管解決方案,所以我無法獲得shell訪問該文件。然而,正如你可以看到here,沒有不應該在那裏的字符,並且運行與腳本相同的文件不會產生這個字符。 (該共享託管公司已獲得0幫助,不斷告訴我這是一個瀏覽器問題)。