質問

私のスクリプトは間違いなくUTF-8に保存されています。 PDOをインスタンス化しています "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8". 。私のテーブルはINNODBを使用し、UTF8_GENERAL_CIを使用して照合されます。私のページはのいずれかで送信されます Content-Type: text/html; charset=UTF-8 ヘッダーまたは <meta> 同等。

PDOを使用して、HTTP入力またはソースコードにリテラルの文字列から発信される€キャラクターを保存する場合、私は残されています c3 a2 e2 80 9a c2 ac MySQL Workbench 5.2によると。これをデータベースから取得し、ページに表示すると正常に機能します。しかし、phpmyadminとworkbenchではわかります €.

これら2つのツールを使用して€を保存するとき、私は e2 82 ac, 、これは明らかに正しいUTF-8表現ですが、PHPでこれを取得して出力しようとすると、表示されます。

私の質問は、この矛盾がどこから発生するのか、そして私のウェブページとデータベースツールを完璧に機能させることは可能ですか?

役に立ちましたか?

解決

DSNのcharsetディレクティブは、実際にMSSQLに適用されます。私は単に実行する必要がありました SET NAMES. 。申し訳ありません。

私はそれを達成しました:

parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                    $this->user, $this->password,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));

他のヒント

簡単には、€をSuperfixのHTMLエンティティ€に変換します(ただし、他の特別文献で問題が発生する場合があります)

問題の反対側(およびより具体的に)はmysqlをチェックすることです Character_set_server そして最も一般的な原因 Character_set_client -Seealso: 接続充電器

また、Meta equivが違いをもたらさないことに注意することが重要です。 いつも ヘッダーを設定します( 'content-type:...)

HTMLページは正しいので、データベースに正しいデータを保存しているようです。

€ Windows-1252と誤って解釈されるユーロ記号のUTF-8エンコードです。 Windowsツールは、データベースエンコードの代わりに「ANSI」エンコードを使用しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top