0

我对 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);
        }
    }
});
});

改变城市.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 在页面上正确显示。

我在这里做错了什么?我只是无法弄清楚错误来自我的代码还是数据库。

4

3 回答 3

2

尝试使用带有“UTF8”作为参数的 PHP 函数 mysql_set_charset()。

http://php.net/manual/en/function.mysql-set-charset.php

于 2012-08-07T12:52:51.637 回答
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?

于 2012-08-07T12:53:16.280 回答
0

您可以在数据库连接后设置名称编码 - 遵循本教程:http ://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html/

于 2012-08-07T12:50:49.683 回答