2010-03-30 46 views
0

最近我將一個提供程序的主機切換到另一個提供程序,並且顯示西里爾文字符時出現問題。從數據庫中讀取的字符顯示正確,但在PHP文件中硬編碼的字符不是(它們顯示爲問號)。PHP:西里爾文字符顯示不正確

包含php源代碼的文件保存爲utf-8格式。幫助任何人?

回答

0

它與php文件的編碼有關。這些文件是使用Windows記事本創建的,並以utf-8編碼保存。

當我使用Notepad2打開文件時,文件的編碼是「帶簽名的utf-8」。當我將編碼更改爲「utf-8」時,文本顯示正確。

4

試着將元標記指示在頭部分的編碼:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
0

原因您的問題往往是偶然的重新編碼由程序員的編輯器的腳本文件。硬編碼依賴於PHP文件中的編碼的字符串不是一個好習慣。

嘗試切換瀏覽器的編碼以查找硬編碼文本使用的編碼,它可能會幫助您解決問題。另外,還要確保發送正確的HTTP標頭的每一頁:

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

Optionaly你可以在你的HTML插入meta標籤:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
+0

都嘗試,不能正常工作。一切工作完美的以前託管,所以我認爲這個問題是與新的提供者的PHP設置的東西。 – Bogi 2010-03-30 11:13:26

1

這個問題似乎很奇怪。
這些問號的形式是什麼?黑色鑽石有問題還是隻是普通的問號?
首先仔細檢查你的文件是否真的編碼爲utf-8
嘗試這個頭添加到您的代碼(所有輸出上面)

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

但我懷疑這會有所幫助,因爲你的數據庫中的文本已經看起來不錯。
你的代碼中有任何SET NAMES查詢嗎?它設置了什麼charset

+0

加了它,不起作用。是的,我有設置名稱查詢它是SET NAMES'utf8'。 – Bogi 2010-03-30 11:12:10

+0

@ user295502,所以你的頁面不在UTF-8中,然後 – 2010-03-30 11:24:15

-1

我一直在爲這個完全相同的問題而戰,因爲我試圖在小部件上添加一些法國/德國國際化功能。

帶有存儲在我的數據庫中的口音的字符可以按照UTF-8打印。但是,在PHP文件中硬編碼爲數組的字符要麼顯示爲內部帶有問號的黑色菱形,要麼顯示爲方形小方框。

我試過編碼/解碼硬編碼的字符串從我的PHP文件中每一種方式,但無法讓字符正確顯示。

由於我有這樣一組有限的字符,並且嚴格使用HTML,我只是在我的intl類中添加了一些功能來替換html實體的字符。

我有這些屬性。

static $accentEntities = array('á' => '&aacute;', 
           'É' => '&Eacute;', 
           'é' => '&eacute;', 
           'í' => '&iacute;', 
           'û' => '&ucirc;', 
           'ü' => '&uuml;'); 
static $accents = array(); 
static $entities = array(); 

我安裝在我的構造我的一些更換陣列...

foreach (self::$accentEntities as $char => $entity) { 
    self::$accents[] = $char; 
    self::$entities[] = $entity; 
} 

,然後當我需要在我的班級我的硬編碼字符串中的一個我剛剛返回它是這樣的...

return str_replace(self::$accents,self::$entities,$str); 

這是一個完全貧民窟的解決方案......但現在,它的工作原理。我一定希望聽到正確的方式來顯示硬編碼到PHP文件中的重音/特殊字符。

1

我的PHP模塊正是有同樣的問題,所有的文字就像「?????????????????」

而且我的代碼用記事本++編寫。我找到了解決問題的辦法。這個問題是不是在標題字符集和meta標籤,因爲瀏覽器實際上知道它是UTF-8字符集。我嘗試了所有編碼從瀏覽器,結果是一樣的,所以我知道這個問題是別的地方,而不是在瀏覽器中的字符編碼的。

我剛打開PHP模塊用記事本++和選擇的所有代碼。之後,在編碼菜單中,我選擇了「轉換爲UTF-8」。上傳到服務器後,一切都像魅力一樣。

+0

好的。爲我工作 – 2017-01-24 18:30:31

1

把這個連接數據庫之後:

mysql_query("SET NAMES UTF8"); 

爲mysqli的

mysqli_query($connecDB,"SET NAMES UTF8"); 

,並在頁面的標題:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
+0

精彩!!這幫了我很多,謝謝! – Lukas 2017-05-02 14:16:55