我對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在頁面上正確顯示它。
我在這裏做錯了什麼?我只是無法弄清楚這個錯誤是來自我的代碼還是數據庫。
數據庫的字符集是否100%明確設置爲UTF8?你插入數據庫的數據是否被100%絕對編碼爲UTF8? – DaveRandom 2012-08-07 12:50:52
如果您有PDO,請檢查您的連接。 – 2012-08-07 12:51:40