2012-08-07 53 views
0

我對utf-8編碼相當陌生,自從使用htmlentities()之後,現在想要改爲在數據庫中使用utf-8。我認爲這可能會非常方便,因爲我正在編程的網站是德語,所以我使用了大量的元音變音。UTF-8適用於數據庫內部,但不適用於數據庫中的字符串

但是,它發生在我身上,我有一個問題,我無法解釋。在HTML頭,我說

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

爲了進行測試,如果我輸入一個簡單的「O」和HTML中的硬編碼,它顯示的罰款。

現在來了一個奇怪的事情:在我的數據庫中,我有一個條目「Köln」 - 在數據庫中它看起來完全一樣。然而,當我用php從表中得到字符串並將其回顯出來時,它會作爲「K ln」回顯出來。另一方面,如果我輸入變音符號並用ajax發送到表格,「Köln」(我鍵入的字符串)在數據庫中變成「Köln」。

我用下面的代碼:

//Change city 
$('#newcitybutton').click(function(){ 
//Get id and city 
var id=encodeURIComponent($('#id').html()); //This does not seem to be the problem - if I leave that out, I still does the same thing 
var city=$('#newcity').val(); 

//Call script to change city 
$.ajax({ 
    type: 'POST', 
    url: 'action/changecity.php', 
    data: 'id='+id+'&city='+city+'&kind='+kind, 
    success: function(feedback){ 
     var json=$.parseJSON(feedback); 
     if(json.success=='false'){ 
      $('#newcityfeedback').css('color','red').html(json.message).hide().fadeIn(200); 
     }else if(json.success=='true'){ 
      $('#newcity').hide(); 
      $('#newcitybutton').hide(); 
      $('#'+kind+'city').html(decodeURIComponent(city)); 
      $('#newcityfeedback').css('color','green').html(json.message).hide().fadeIn(200).delay(2000).fadeOut(200); 
     } 
    } 
}); 
}); 

Changecity.php:

//Save in vars 
$id=$_POST['id']; 
$city=$_POST['city']; 
$kind=$_POST['kind']; 

//Update city 
$query="UPDATE ".$kind."s SET city='$city' WHERE id=$id"; 
mysql_query($query); 

我想,當我把在數據庫之前使用$city=utf8_decode($city);,它被正確地保存在那裏。但後來我需要使用utf8_encode在頁面上正確顯示它。

我在這裏做錯了什麼?我只是無法弄清楚這個錯誤是來自我的代碼還是數據庫。

+0

數據庫的字符集是否100%明確設置爲UTF8?你插入數據庫的數據是否被100%絕對編碼爲UTF8? – DaveRandom 2012-08-07 12:50:52

+0

如果您有PDO,請檢查您的連接。 – 2012-08-07 12:51:40

回答

1

您還需要設置當前連接MySQL使用的編碼。

使用PDO,通過以下選項PDO類的構造函數:

$pdoOptions = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
); 


使用的棄用MySQL擴展,請執行以下查詢您所創建的連接後右:

mysql_query("SET NAMES utf8"); 

查看此計算器的更多信息:SET NAMES utf8 in MySQL?

相關問題