0

重複の可能性:
PHP:特殊文字を含む配列キーが見つかりません

文字列を比較して、文字列に対応する番号を決定しています。1セットの文字列はMySQLDBに保存され、もう1セットの文字列はphpの配列のキーとして保存されます。

次の文字列を検索しようとすると、配列に見つかりません。「幼稚園/保育園/クレッシュ/デイマザーに通う子供」

コードの詳細については、次のテストに導いたこの前の質問で入手できます。

提案されたように16進ダンプを実行した後、次の結果が得られました

MySQL DBから:

43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 e8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72

phpの文字列から:

43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 c3 a8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72

違いは、MySQLDBの「E8」と「C3A8」または「è」とphp文字列の「è」でした。

では、ハードコードされたphp配列のキー文字が「è」のままであることを確認するにはどうすればよいですか?

4

1 に答える 1

1

PHPとMySQLの両方で同じエンコーディングを使用する必要があります。

PHP文字列がUTF-8でエンコードされている場合、テーブルは「」であるcharset必要がutf8あり、 「または」であるcollation必要があります。また、UTF-8でクエリした結果も必要であることをMySQLに伝える必要があります。これを実現する3つの方法は次のとおりです。utf8_general_ciutf8_unicode_ci

  1. 接続時のクエリ:SET NAMES utf8 MySQLに接続した直後に実行します。
  2. PDOの使用: $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');これは基本的に上記と同じですが、PDOによって自動実行されます。
  3. 永続的(my.cnf):これにより、すべての接続に対してUTF-8が暗黙的に設定されます。init-connect='SET NAMES utf8'MySQLの設定ファイルに:を追加するだけですmy.cnf

私は個人的に3番目のオプションを使用しますが、共有環境では2番目のオプションを選択します。

于 2012-10-25T07:02:03.040 に答える