0

問題:

MySQLテーブルからPHPZendFrameworkアプリケーションに値を取得すると、文字äとöがデータベースからブラウザに次のように返されます。

問題が発生する可能性のあるアイデアはありますか?いくつかのプロパティをUTF-8に設定しようとしましたが、それでもこれは発生します...私はまだ何かを見逃していると思います。

どうすればこれを確実に取り除くことができるか、いくつかの解決策を教えていただけますか?設定する必要のある構成など。

ありがとうございました :)

4

4 に答える 4

1

間違ったエンコーディングの文字がブラウザーに読み込まれると、� または ? として表示されます。どこかにエンコーディングの不一致があります:

  • ブラウザで
  • データベース テーブルの照合で
  • HTML 文字セットで

これらの文字は Unicode UTF-8 で機能するため、DB テーブルの照合順序がutf8_bin類似していることを確認する必要があります。たとえば、すべてを UTF-8 スウェーデン語で保存する場合は、utf8_swedish_ci

ブラウザーで、コンテンツのエンコードが自動検出に設定されていることを確認します。

MySQL で UTF-8 / utf8_bin テーブルを作成する場合の例を次に示します。

CREATE TABLE `sample` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

既存のテーブルを ALTER して UTF-8 を使用するには、次のコマンドを使用します。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

この投稿には、使用するかどうかの適切な説明がありますCONVERT TO CHRACTER SET utf8

NoteCHARSETCOLLATEの両方を設定する必要があります。そうしないと、自動的に取得されますCOLLATE=utf8_general_ci

HTML の場合、charset は以下を使用して設定できます。

<meta charset="UTF-8">
于 2012-07-31T14:59:27.610 に答える
1

Zend_Db_Adapter_Pdo_Mysqlに関しては、コンストラクターが次のようにUTF-8を使用していることを確認してください。

$your_pdo = Zend_Db::factory('Pdo_Mysql', array(
                'host'     => DATABASE_HOST,
                'username' => DATABASE_USERNAME,
                'password' => DATABASE_PASSWORD,
                'dbname'   => DATABASE_DBNAME,
                'options'  => array( 'charset' => 'utf8' )
        ) );    

そして、HTMLエスケープでデータを使用する前に:

return htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );

Content-Type、ファイルエンコーディングなどに関する他のすべての回答を確認してください。

于 2012-07-31T15:06:44.210 に答える
1

ブラウザに設定されている「ウェブサイトのエンコード」を確認することをお勧めします。

Web サイトがエンコーディングを提供せず、mysql/php がそれを「正しく」処理している場合、これが発生する可能性があります (たとえば、「western 1252」に設定されていますが、utf8/unicode が必要です)。

Firefox では、ビュー -> エンコーディング (または同様の方法) でエンコーディングを確認できます。

于 2012-07-31T15:00:45.860 に答える
1

エンコーディングを UTF-8 に正しく設定するだけです。最小限の作業ソリューションの基本的な手順は次のとおりです。

  1. DB接続がUTF-8を使用していることを確認してください
  2. HTTP content-type が UTF-8 に設定されていることを確認してください (例: (また、ドキュメントheader('Content-type: text/html; charset=utf-8');のエンコーディングを指定することもできます)
  3. ファイルを UTF-8 として保存します。Windows では、ファイルは CP-1251 として保存されます。これは、特殊なアクセント付き文字が UTF-8 エンコードされたバイトとして扱われないことを意味します (したがって、ブラウザーに出力されるものは破棄されます。ファイルを保存するときは、エンコードを明示的に設定する必要があります。 Linux/Mac では、デフォルトで UTF-8 が使用されるため、これは問題になりません。
  4. php.iniエンコーディングを上書きしないようにしてください。外部.htaccessファイルがある場合は、そうでないことを確認してください。

UTF-8 を正しく処理すると、 / などは必要なくなりutf8_encode、特別な処理をしなくてもアクセント付きの文字を適切に出力できるようになります。utf8_decodehtmlentities

: 一部のロケールは UTF-8 で処理されません。特にThaïです。

于 2012-07-31T15:00:52.027 に答える