0

utf8_unicode_ci 照合を使用して MySQL DB をセットアップしました。その上のすべてのテーブルと列には同じ照合があります。

私の Doctrine 設定には接続オプションとして SET NAMES utf8 があり、私の html ファイルは utf8 charset を使用しています。

これらのテーブルに保存されたテキストには、アクセント付きの文字 (á、è など) が含まれています。

問題は、コンテンツをDBに保存すると、ISOをUTF8テーブルに保存しようとしたときのように、奇妙な文字で保存されることです。(例: Notícias)

私が見つけた唯一の回避策は、保存前に utf8_decode を実行し、印刷前に utf8_encode を実行することです。

つまり、何らかの理由で、その間にある何かが iso で utf8 を台無しにしていることを意味します。

何がありますか?

ありがとう。

編集:

保存する前にエンコードし、印刷する前にデコードするように設定しましたが、正しく印刷されますが、DB では文字が次のように変わります。

XPTÓ -> XPTÓ“</p>

これにより、DB で「XPTÓ」を検索できなくなります...

4

1 に答える 1

0

print bin2hex($string);元のワークフローの各ステップ (つまり、エンコード/デコードのステップなし) で行います。

次のそれぞれを実行します。

  1. $_POSTデータ
  2. フォームの検証後に取得する値
  3. バインドされたエンティティに入れられる値
  4. PDO を使用して直接照会した場合にデータベースから取得する値 (から取得
    $em->getConnection())
  5. リロード時にエンティティに取り込まれる値 ( 経由でこれを行うことができます$em->detach($entity); $entity = $em->find('Entity', $id);)

出力が変化するポイントを見て、そこに検索を集中させます。

私も再確認します:

  • データベース上:テーブル全体SHOW CREATE TABLE 'table'を表示します(個々の列に違いはありません)CHARSET=utf8
  • データベースの値を確認するために使用するツール (Navicat、phpMyAdmin) が正しいエンコーディング セットを持っていること。
于 2013-05-07T01:27:27.653 に答える