2010-06-24 22 views
2

的我試圖把一個網站上的一些中國的文字,但只要頁面被放在網上,而不是中國的文字,我看到問號的行?????? ???? ???????????問號而是中國特色

我在WAMP服務器上測試了同一個頁面,然後把它放到在線狀態(所有的頁面都有一個php擴展名)並且中文字符顯示得很好,只有當從在線主機服務器請求頁面時,我才能看到所有的問號。

頁面包含(如果這能幫助):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
+1

檢查服務器發送的標頭。內容類型標題可能會覆蓋您的元標記。 – Artefacto

+1

在粘貼到您的網頁之前,請檢查您的中文文本是否使用utf-8編碼。頁面上的標題是什麼? –

+0

我對標題不太熟悉,下面是工作頁面的響應標題: Date:Thu,24 Jun 2010 05:24:23 GMT Server:Apache/2.0.63(Win32)PHP/5.2。 11 X-Powered-by:PHP/5.2.11 Content-Length:3622 Keep-Alive:timeout = 15,max = 100 Connection:Keep-Alive Content-Type:text/html;字符集= UTF-8 200 OK 和非工作頁: 日期:星期四,2010 5點26分54秒GMT 服務器6月24日:阿帕奇 X供電-者:PHP/5.2.12 連接:關閉 傳輸編碼:分塊 內容類型:文本/ html 200行 – IntellSpire

回答

1

實際的HTTP響應標頭總是會覆蓋HTML <meta>頭。按您的評論:

我不是太熟悉的頭,這裏是從工作頁面的響應頭:

Date: Thu, 24 Jun 2010 05:24:23 GMT 
Server: Apache/2.0.63 (Win32) PHP/5.2.11 
X-Powered-By: PHP/5.2.11 
Content-Length: 3622 
Keep-Alive: timeout=15, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=UTF-8 
200 OK
和非工作頁:
Date: Thu, 24 Jun 2010 05:26:54 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.12 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: text/html 
200 OK 

看到,HTTP非工作頁的響應報頭具有不任何指定的字符集的一Content-Typetext/html。它應該是text/html; charset=UTF-8

你可以去解決這個通過添加下面一行到你的PHP頁面的頂部之前發出任何字符(HTML),以響應主體。

header('Content-Type: text/html; charset=UTF-8'); 

更新:按照意見,上述原因似乎被排除在外。下一步檢查;文件本身保存爲UTF-8?右擊頁面並查看源代碼。問號也在那裏嗎?如果是這樣,那麼在FTP傳輸到主機時出現問題。在FTP客戶端設置中選擇二進制代替文本/ ASCII或爲傳輸的文本文件設置字符編碼並重試。

+0

好吧,我放置了<?php header('Content-Type:text/html; charset = UTF-8'); ?>在文檔的第一行,返回的響應頭Content-Type:text/html;字符集= UTF-8,但我仍然只看到問號 – IntellSpire

+0

好吧,我改變了傳輸類型爲二進制,仍然沒有運氣 我檢查了頁面源,是的,問號仍然存在。當我檢查cPanel中的文件源時,我可以看到中文文本(所以ftp傳輸看起來很好) – IntellSpire

+0

看起來像一個web服務器問題。我會諮詢託管支持。 – BalusC

3

如果您正在使用某種形式的數據庫,請確保您查詢數據庫之前(但在建立連接後),運行以下命令:

mysql_set_charset("utf8"); 
+0

沒有數據庫,謝謝。 – IntellSpire

+1

謝謝,這對我有效。你能解釋爲什麼這是必要的考慮到我的數據庫中的所有內容都是utf-8,並且我的php文件也保存爲utf-8? – Shawn

+1

@Shawn我不完全確定,但我的猜測是連接依賴於遠程服務器上安裝的語言環境,這不是開發人員在開發時設置/通常意識到的。 – kamasheto

0

我有一個類似的問題,並能夠解決它。

我不得不通過PHP網站的內容。當我將它視爲原始HTML文件時,它會正確顯示字符,但是如果我通過PHP(在我的情況下,使用auto_prepend_file)傳遞它,它會將字符轉換爲問號。

解決的辦法是關掉detect_unicode在PHP設置。在我的情況下,我剛剛編輯.htaccess文件,以包括行:

php_value detect_unicode "0" 

...並且漢字開始正確顯示。可能有一個使用ini_set()的等效解決方案。

希望這會有所幫助。

0

由於PHP中的mysql_ *函數自PHP 5.5起棄用。0,這裏是您可以執行的SQL本質上是做相同mysql_set_charset:

SQL SET character_set_client = utf8

這是在讓我的形式,Unicode文本保存到MySQL的關鍵。在建立與MySQL服務器的連接後立即執行該SQL查詢。