2013-03-13 58 views
2

我有一個很奇怪的問題,無法弄清楚。 我正在使用記事本++,如果我保存爲希臘字符(不是來自數據庫的字符)的.php它顯示希臘字符作爲網頁瀏覽器中的問號,但如果我保存相同的字符文件爲.html它正確顯示字符。希臘字符編碼工作在HTML但不是在PHP

如果從數據庫中顯示希臘字符,它會正確顯示它們而不會出現問題。此外,它不能正常工作在我的共享主機上,但在我的本地主機上正常工作。

我試圖用不同的編碼保存.php文件,但仍然是同樣的問題。我也試着用utf-8添加php header()和meta標籤,但沒有運氣。

可能是什麼問題? 謝謝

+2

您保存文件的編碼必須與您聲明的編碼(例如通過元標記)相匹配。如果你確保這些匹配,它應該工作。如果它仍然沒有,你可以在這裏展示一個例子,並檢查你的瀏覽器它實際使用的那個頁面的編碼嗎? – 2013-03-13 23:10:15

+1

我現在無權訪問十六進制編輯器,但是這些?看起來像正常問號給我。你確定在Notepad ++中保存了正確的希臘字符,並且該文件是UTF-8編碼的嗎?這似乎幾乎不可能。你可以回到.html文件並將其另存爲Php嗎?這看起來像你的角色在一路上的某處亂碼 – 2013-03-13 23:17:30

+0

你有沒有嘗試在記事本++與BOM和沒有BOM保存? – 2013-03-13 23:18:17

回答

5

即使聽起來很奇怪你的MySQL數據輸出正確時,PHP的字符串編碼失敗,我會試圖解決你的問題的方式,將分解到步驟試圖找出這個問題產生編碼錯誤!

首先,你應該嘗試的php.ini文件,它是這樣做內設置你的default_charsetutf-8

default_charset = "utf-8"; 

如果你不能這樣做,因爲供應商的限制,你還可以能夠使用ini_set函數在運行時更改該值!

您還需要確保Web服務器設置爲輸出utf-8編碼文件!在Apache中這個可以在httpd.conf或使用htaccess的文件來完成兩個:

AddDefaultCharset UTF-8 

此時如果一切都失敗了,還是......嘗試去用PHP頭和對應的HTML字符集:

<?php header("content-type: text/html;charset=utf-8") ?> 
<!doctype> 
<html> 
    <head> 
     <meta charset="utf-8"> 
    </head> 
    <body> 
     <?php echo "α β γ δ ε ϝ ϛ ζ η θ ι κ λ μ ν ξ ο π ϟ ϙ ρ σ τ υ φ χ ψ ω ϡ" ?> 
    </body> 
</html> 

儘管如此,您的文件也使用適當的編碼進行保存(utf-8幾乎總是更好的選擇,它有助於很大程度上防止問題),這一點非常重要。如果您保存的編碼不是utf-8文件,請將它們從舊內容中刪除。有時,編輯器在創建文件後並不能真正地切換編碼,即使記事本++一般都很好;只需使用converto to而不是encode in功能!

如果仍然沒有工作,但我希望它現在,你可能會爲了解決這個問題檢查了一些其他的PHP替代像mb_detect_encodingmb_convert_encodinghtmlentitieshtmlspecialchars