1

Zend Framework アプリで正しい文字が表示されません。

EG/ rue de l'Odéon

次のように表示されます。

オドオン通り

Web サービスを介して情報を表示する場合、およびアプリケーション ビューを介して情報を表示する場合。

私は次のことを試しました:

1) ビューに文字エンコーディングを設定します。

$view->setEncoding('UTF-8');

2)基礎となるデータベースの列/テーブルのエンコーディングがUTF8であることを確認しました(mysql db)

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;

3) Db 接続を作成するときに、文字セット変数を Zend_Db::Factory メソッドに渡しました。これは、レジストリから取得したオブジェクトの構成セクションです。

 [_config:protected] => Array
    (
        [host] => localhost
        [username] => root
        [password] => ---------------
        [dbname] => db_staging
        [charset] => utf8
        [options] => Array
            (
                [caseFolding] => 0
                [autoQuoteIdentifiers] => 1
            )
4

2 に答える 2

3

以下、いくつか質問。これらのいくつかは完全にばかげているように聞こえることは知っていますが、このように立ち往生すると、それはあまりにも明白なことだと自動的に思い込み、何日も自分を蹴り飛ばします! :) まず第一に、上記の charset オプションを指定して ZF 1.8 を使用していると思いますか? そうでない場合 (または以下のリストで解決しない場合でも)、古い方法に戻って、最初に何かが解決するかどうかを確認してください。

  1. すべてのテキスト フィールドと同様に、テーブルの照合順序が utf8_general_ci になったことを確認できますか? 上記のコマンドは照合について言及していないため、これがデフォルトの照合として設定されていると仮定します(欠落している場合のデフォルトであり、文字セットは utf8 です)。
  2. 次に、そのコマンドを再送信しますが、照合を utf8_unicode_ci に設定します (一般的な照合よりも低速ですが正確です。パフォーマンスはわずかに低下しますが、既存のデータ テーブルには役立つ可能性があります)。
  3. 念のため、データを再入力しましたか? 既知のUTF-8エディターに入力して、utf8文字を確実にコピーしたことを再確認してください。と
  4. ソース テキストが UTF-8 であり、ISO-8859-1 や Windows 1252 のようなものではないことを 100% 確信していますか?
  5. ビューのエンコーディングができるだけ早く設定されていることを確認してください (新しいビューが ViewRenderer ヘルパーに追加されます)。
  6. どのmysqlドライバーが使用されていますか? Mysqli または PDO? オプションに適切な設定を使用しましたか?
  7. 文字エンコーディングのビューのオーバーライドはありますか? エンコーディングは、Content-Type ヘッダーから取得され、次に任意の XML 宣言 (XHTML など)、最後に Content-Type のメタ http-equiv タグから取得されます。これは優先順位でもあります。以前の宣言が UTF-8 と一致しない場合、ページは意図したものを使用しない可能性があります。正しいヘッダー セット (通常は "Content-Type: text/html; charset=UTF-8") を使用してフロント コントローラーにカスタム Response オブジェクトを設定することにより、ヘッダーをリセットできます。
  8. ブラウザでエンコーディングが誤って検出された場合にエンコーディングを検出するには、ページのブラウザ エンコーディングをリセットして手動でデバッグすることもできます (Firefox の [表示] > [文字エンコーディング] など)。ISO または Windows エンコーディングを確認すると、より適切に表示されます。
  9. utf8decode() のテンプレートでテキスト出力をラップしてみてください - おそらく何かがそれを二重にエンコードしていますか? もっと奇妙なことが起こった...

私のUTF-8クライシスチェックリスト;)。リストされているものが役立つかどうか教えてください。考えられるほとんどの項目を網羅していると思います。

于 2009-09-16T13:12:57.127 に答える
3

Pádraic の優れたリストに加えて、 http://akrabat.com/2009/03/18/utf8-php-and-mysql/ をご覧ください。

于 2009-09-17T07:06:56.093 に答える