4
$userTb = new My_Tb_User();  //Child of Zend_Db_Table_Abstract
$row = $userTb->find(9)->current();
$row->name = 'STÖVER';
$row->save();

name 列の値の行 9 のユーザー テーブル内では、 ?STの代わりに格納されます。STÖVER

Öでサポートされているドイツ語の文字UTF-8です。phpmyadmin を使用して手動で「STÖVER」と入力すると、正しく保存されます。

また、db アダプターの作成時に値を指定して charset パラメーターを渡しutf8ましたが、まだ運がありません。

4

2 に答える 2

3

のマニュアル エントリを読むと、ISO-8859-1 でエンコードされた文字列が UTF-8utf8_encodeに変換されます。関数名は、必要なある種の自動エンコーディングを示唆しているため、恐ろしい誤称です。そうではありません。ソース コードが UTF-8 として保存され、「STÖVER」を に割り当てた場合、は UTF-8 でエンコードされた文字「STÖVER」を保持します。これ以上のアクションは必要ありません。実際、UTF-8 文字列を (誤って) ISO-8859-1 から UTF-8 に変換しようとすると文字化けします。$string$string

utf8_encode('STÖVER');

スタックオーバーフローでこの質問を確認してください

于 2012-12-19T07:00:14.587 に答える
2

これを使用するのは悪い習慣utf8_encodeです。これにより、アプリが非常に複雑になります。ソースを探して問題を解決してみてください。

いくつかの考え:

  • データベース サーバーの文字セットの問題 (サーバーのエンコーディングを確認してください)
  • データベース クライアントの文字セットの問題 (接続のエンコーディングを確認してください)
  • データベース テーブルの文字セットの問題 (テーブルのエンコーディングを確認してください)
  • PHP のデフォルトのエンコーディングの問題 ( default_encodingparameters.ini のパラメータを確認してください)
  • マルチバイトの設定ミス (parameters.ini の mb_string パラメータを参照)
  • 文字セットの<form>問題 (utf-8 として送信されていることを確認してください)
  • 文字セットの<html>問題 (HTML ファイルに enctype が設定されていない場合)
  • 問題 (間違ったContent-encoding:エンコーディングが Apache によって送信される場合)。
于 2012-12-19T07:10:10.693 に答える