1

こんにちは、アプリケーションで文字エンコーディングの問題があり、何か助けを求めることにしました。ガイダンスが与えられたにもかかわらず、問題を解決できなかったためです。 </p>

また、問題を解決するためにこれまでに行ったことをすべて投稿します。

1) データベース: テーブルの照合順序を変更しようとしました。テーブルの 1 つに対して SHOW TABLE STATUS が提供する情報を次に示します。

名前 = test_groups
エンジン = InnoDB
バージョン = 10
Row_format = コンパクト
照合 = utf8_swedish_ci

データベース文字変数は以下を提供します:

| | character_set_client = utf8
| character_set_connection = utf8
| character_set_database = latin1 (これが原因なのかな?)
| character_set_filesystem = バイナリ
| character_set_results = utf8
| character_set_server = utf8
| character_set_system = utf8

2)Apache httpd.confには次のものがあります:

AddDefaultCharset UTF-8

3) 私の Zend アプリケーション application.ini で:

resources.view.encoding = "UTF-8"

4) Firefox 14.0.1 ブラウザーで

edit->preferences->content->advanced->Default character encoding = Unicode (UTF-8)

5) 私の php コードのメタタグで:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

他にも興味深いことがいくつかあります。自分のページを見て、Firefox から変更すると

View->Character encoding->Western (ISO-8859-1)

、MySQL データベースからの � 文字は ö 文字に問題ありませんが、私の php コードからの ö 文字は â t 文字に変わります。

MySQLデータベースからのデータのエンコーディングをチェックするときの別のこと

mb_detect_encoding($DATA_FROM_MYSQL_DATABASE)

UTF-8を出力します!! 最後に、コードで行う場合:

utf8_encode($DATA_FROM_MYSQL_DATABASE)

そして、問題がなくなるという結果を出力します。ここで何が起こっているのか x) すべての助けに感謝します

4

2 に答える 2

2

SET NAMES utf8MySQL への最初のクエリとして PHPを送信していますか? なければそれが原因かもしれません。

SET NAMES は、クライアントが SQL ステートメントをサーバーに送信するために使用する文字セットを示します。したがって、SET NAMES 'cp1251' はサーバーに、「このクライアントからの今後の着信メッセージは文字セット cp1251 である」ことを伝えます。また、結果をクライアントに返すためにサーバーが使用する文字セットも指定します。(たとえば、SELECT ステートメントを使用する場合に、列の値に使用する文字セットを示します。)

MySQLでSET NAMES utf8? 方法と理由について詳しく説明しています。

于 2012-07-31T16:48:30.130 に答える
1

トラブルシューティング:

データベースを確認します (たとえば、PHPMyAdmin を使用)。文字は正しく保存されていますか?それともばかげているように見えますか?

データベース内の文字に問題がなければ、取得時に問題が発生します。それらが正しく保存されていない場合(私が推測するように)、問題は「保存」にあります。

  1. ソース コード ファイルを調べて、それらが UTF-8 でエンコードされているかどうかを確認します。
  2. mysql 接続で UTF8 (mysqli::set_charset('utf8') または mysql_set_charset('utf8') または PDO: Add charset to the connection string (charset=utf8) ) を使用するように強制します。
于 2012-07-31T16:51:19.810 に答える