1

これは本当に私を夢中にさせています。私はスペイン語のWebサイト(多くのラテン文字を意味します)を構築しており、Zendフレームワークを使用しています。

保存すると、のáように表示されますá。文字セットエンコーディングであることは知っていますが、その理由がわかりません。

私の頭の文字セットは<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 私のデータベースはutf8_general_ciです。文字セットを他の文字セットに変更しましたが、常に同じ問題が発生します。

データベースを見ると、保存されるのはá

なぜこれが起こっているのか考えていますか?ありがとう!

4

2 に答える 2

1

エンコーディングの問題を解決するためのレシピは次のとおりです。

  1. DB、テーブル、およびフィールドは collat​​ion を使用する必要がありますutf8_unicode_ci
  2. コード (HTML、PHP...すべて) が UTF-8 でエンコードされていることを確認してください。
  3. 常にこのmetaタグを使用してください:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. これは長いです:

MySQL ファイル構成にアクセスできる場合はmy.cnf、次の行を追加するだけです。

init-connect='SET NAMES utf8'

これにより、MySQL は接続ごとに結果を UTF-8 で返すようになります。

編集できないmy.cnfが PDO を使用している場合は、次の方法で接続を開きます。

$pdo = new PDO($dsn, $usr, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

PDO を使用していない場合は、使用を開始してください。何を待っているのでしょうか。一方、ext/MySQLi を使用している場合は、各接続後にこれを実行できます。

$mysql->set_charset('utf8');

または、プレーンな古い ext/MySQL を使用する場合は次のようになります。

mysql_set_charset('utf8', $connection);
于 2012-11-08T14:44:05.080 に答える
0

ASCII マップ外の文字áおよびその他の文字は、 でマッピングできますunicode

文字セットを使用してテーブル内のデータをストーミングしているため、UTF-8文字は適切に保存されています。

私はあなたにそれを提案します

  • データを保存する前に
  • データを取得する前に

クエリを実行しますSET NAMES UTF-8UTF-8これにより、ASCII マップの外側にある文字を処理してデータが取得されます。

データを出力している間、ブラウザにUTF-8文字セットを使用してデータを印刷するように強制/指示していることを確認してください。

于 2012-11-08T14:31:26.640 に答える