2
4

7 に答える 7

3

my.cnf(/ etc /にある可能性が高い)に次のエントリがあることを確認してください。

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8

変更を加えたら、mysqlサービスを再起動する必要があります。

これをもう少し明確にするために、ここに私のコメントを追加します。

次のHTTPヘッダーが設定されていることを確認して、ブラウザーが予期する文字セットを認識できるようにします。

Content-type: text/html; charset=UTF-8

また、このタグをhtml<head>タグの先頭に追加してみてください

<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />
于 2012-12-26T00:11:35.553 に答える
1

To make the browser show up correctly.you should check three points:

  1. encoding of your script file.
  2. encoding of connection.
  3. encoding of database or table schema.

if all of these are compatible, you'll get the page you want.

于 2012-12-26T02:23:33.367 に答える
1

The original data has been encoded as UTF-8, the result interpreted in Windows-1252 and then UTF-8 encoded again. This is really bad; it isn't about a simple encoding mismatch that a header would fix. Your data is actually broken.

If the data is ok in the database (check with SELECT hex(column) FROM myTable) to see if it was double encoded already in the database), then there must be your code that is converting it to UTF-8 on output.

Search your project for uses of function utf8_encode, convert_to_utf8, or just iconv or mb_convert_encoding. Running

$ grep -rn "\(utf8_\(en\|de\)code\|convert_to_utf8\|iconv\|mb_convert_encoding\)" .

On your application's /application folder should be enough to find something.

Also see config values for these:

<?php
var_dump(
    ini_get( "mbstring.http_output" ),
    ini_get( "mbstring.encoding_translation" )
);
于 2012-12-26T11:50:02.307 に答える
1

Well, if you absolutely and positively sure that your mysql client encoding is set to utf8, there are 2 possible cases. One - double encoding - described by Esailija.

But there is another one: you have your data actually encoded in 1251, not in utf-8. In this case you have to either recode your data or set proper encoding on the tables. Though it is not one button push task
Here is a manual (in russian) exаctly for that case: http://phpfaq.ru/charset#repair

In short, you have to dump your table, using the same encoding set on the table (to avoid recoding), backup that dump in safe place, then change table definitions to reflect the actual encoding and then load it back.

于 2012-12-26T13:00:37.843 に答える
0

このバグとの戦いの2日後、最終的に問題を理解しました。@ yourcommonsense、@ robsquires、および問題のデバッグに役立つ優れたリソースを提供してくれた私の友人に感謝します。

問題は、データベースへのSQLファイルのダンプ(インポート)時に、サーバー、データベース、クライアント、および接続の文字セットがに設定されていたことでしたlatin1statusコマンドはそれを理解するのに役立ちました)。そのため、コマンドラインもに設定されlatin1ていたため、正しい文字が表示されていましたが、PHPコードとの接続はUTF8であり、再度エンコードしようとしていました。結局、ダブルエンコーディングになりました。

解決策

  1. mysqldumpテーブルとデータ(にいる間latin1
  2. データベースをダンプします
  3. /etc/my.cnfRob Squiresが述べたように、デフォルトの文字セットをUTF8に設定します
  4. mysqlを再起動します
  5. 適切な文字セットと照合を使用してデータベースを再作成します
  6. ファイルをその中にダンプします

そしてそれはうまくいきます。

貢献してくれてありがとう!

于 2012-12-28T05:25:26.227 に答える
0

これは、mbstring拡張機能がインストールされていないことが原因である可能性もあります(これにより、開発環境と本番環境の違いが説明されます)

この投稿をチェックしてください、あなたにもう少し答えを与えるかもしれません。

于 2012-12-26T00:47:47.793 に答える
0

Try mysql_set_charset('utf8') after the mysql connect. Then it should works.

于 2012-12-26T11:02:44.523 に答える