我对utf-8编码很新,从那时起就使用了htmlentities(),但现在想要更改为在数据库中使用utf-8。我认为这可能非常方便,因为我编程的网站是德语,我使用的是很多变音符号。
但是,我遇到了一个我无法解释的问题。在html头中,我说
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
进行测试时,如果我输入简单的“ö”并在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 :(得分:2)
尝试使用带有“UTF8”的PHP函数mysql_set_charset()作为参数。
答案 1 :(得分:1)
您还需要设置MySQL用于当前连接的编码。
使用 PDO ,将以下选项传递给PDO类构造函数:
$pdoOptions = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
使用不推荐使用的MySQL扩展,在创建连接后立即执行以下查询:
mysql_query("SET NAMES utf8");
检查此stackoverflow问题以获取更多信息:SET NAMES utf8 in MySQL?
答案 2 :(得分:0)
您可以在数据库连接后设置名称编码 - 请遵循以下教程:http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html/