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

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を使用して、ページに正しく表示する必要があります。

私はここで何が間違っているのですか?間違いが自分のコードによるものなのか、データベースによるものなのかがわかりません。

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"); 

詳細については、このスタックオーバーフローの質問を確認してください: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 に答える