-1

重複の可能性:
UTF-8 全体

わかりました、これは私がそれを理解できないという愚かなことです。

Mysql データベースは utf8_general_ci 照合に設定されています。私が問題を抱えているフィールドはロングテキストタイプです。

としてデータベースに追加された文字、&eacuteまたは他のアクセント付き文字が として返されます。

出力を実行し、stripslashesありとなしの両方を試しましhtml_entity_decodeたが、出力に変化が見つかりません。私は何を間違っていますか?

乾杯

4

2 に答える 2

2

挿入しようとしている文字列の文字エンコーディングは何ですか? ISO-8859-1 の場合は、PHP 関数 utf8_encode() を使用して、データベースに挿入する前に UTF-8 にエンコードできます。

http://php.net/manual/en/function.utf8-encode.php

于 2013-01-08T17:26:59.910 に答える
1

エンコーディングを正しく行うのは本当に難しいです - 層が多すぎます:

  • ブラウザ
  • ページ
  • PHP
  • MySQL

PHP の SQL コマンド "SET CHARSET utf8" は、データがデータベースにどのように格納されていても、クライアント側 (PHP) が utf8 でデータを取得することを保証します。もちろん、最初に正しく保管する必要があります。

DDL 定義と実際のデータ

テーブル/列に定義されたエンコーディングは、データがそのエンコーディングであるという意味ではありません。たまたま別のエンコーディングとして定義されたテーブルutf8が格納されていた場合、MySQL はそれらを別のエンコーディングとして扱いutf8、問題が発生します。つまり、最初にこれを修正する必要があります。

確認事項

各レイヤーでのデータ フローのエンコードを確認する必要があります。

  • HTTP ヘッダー、ヘッダーを確認します。
  • リクエストの本文で実際に送信されたものを確認してください。
  • MySQL にはほぼどこでもエンコーディングがあることを忘れないでください。
    • データベース
    • テーブル
    • コラム
    • サーバー全体
    • クライアント
      どこにでも正しいものがあることを確認してください。

変換

たとえばwindows-1250でデータを受け取り、 に保存する場合はutf-8、保存する前に次の SQL を使用します。

SET NAMES 'cp1250';

DB にデータがあり、windows-1250取得したい場合は、次utf8を使用します。

SET CHARSET 'utf8';

最後のメモ:

データを表示するためにあまりにも「スマート」なツールに頼らないでください。たとえば、phpMyAdmin は (私が使っていたときはそうでした) エンコーディングが本当に悪いです。そして、それはすべてのレイヤーを通過するため、見つけるのは困難です。また、Internet Explorer には、奇妙な規則に基づいてエンコーディングを「推測」するという、実にばかげた動作がありました。エンコードを切り替えることができるシンプルなエディターを使用します。また、MySQL Workbench をお勧めします。

于 2013-01-09T02:15:13.193 に答える