2012-12-16 103 views
2

我的網站上有一個UTF8問題,我無法解決(也不明白)。 當我使用...PHP - UTF8顯示不正確,雖然一切都應該正確

$mysqli->set_charset('utf8'); 

...我的web頁面,然後特殊字符顯示不正確。當我刪除這個函數時,所有來自數據庫查詢的特殊字符都會正確顯示。在我的本地系統是相反的(沒有set_charset('utf8')字符不以正確的方式顯示)

我也做了一個測試腳本,看看這是否是我的虛擬主機的問題。該測試在我的web空間和本地上正確運行。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
$db = new mysqli(bla bla); 
$db->set_charset('utf8'); 
$sql = "SELECT pages_title 
     FROM pages 
     WHERE pages_title = 'Günstige Tablet PCs'"; 
$result = $db->prepare($sql); 
$result->execute(); 
$result->bind_result($title); 
$result->store_result(); 
$result->fetch(); 
$result->free_result(); 

echo "Title: ". $title; 

現在我已經沒有了解問題的想法。一切設置正確:

  1. 數據庫本身被設置爲utf8,一般-CI
  2. 文件以UTF8格式。
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />已設置。

因爲測試腳本運行正常,所以問題應該在我的代碼中,但我不知道什麼可能會導致錯誤,因爲我沒有做任何與utf8_encode/decode或類似的東西。

任何想法??謝謝!!

+1

是否使用phpMyAdmin正確顯示數據庫中的條目? – Ryan

+3

您應該使用'header'函數而不是'meta'元素。 – Gumbo

+0

是的,一切都很好 –

回答

1

試試這個,應該解決它。

<?php header('Content-Type: text/html; charset=UTF-8'); ?> 
+1

哇,作品!謝謝!! –

+0

好的,您是否更改了數據庫中的字符集?我的意思是在創建表格時。這可能是一個問題! – Theolodis

+0

我把它放在錯誤的地方,工作正常。非常感謝你! –

0

你必須發出正確的標題:

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

默認發送的頭信息與服務器(例如:Apache)的配置 - 這可能會導致在不同的環境混亂。

2

您可能會遇到BOM的問題。嘗試複製/粘貼您的整個代碼到另一個文本編輯器,並將其保存爲「沒有BOM的Unicode」(例如Notepad ++)。

+0

也是一個很好的建議,但在這種情況下,文件格式正確。不管怎麼說,多謝拉! –