問題:
MySQLテーブルからPHPZendFrameworkアプリケーションに値を取得すると、文字äとöがデータベースからブラウザに次のように返されます。
問題が発生する可能性のあるアイデアはありますか?いくつかのプロパティをUTF-8に設定しようとしましたが、それでもこれは発生します...私はまだ何かを見逃していると思います。
どうすればこれを確実に取り除くことができるか、いくつかの解決策を教えていただけますか?設定する必要のある構成など。
ありがとうございました :)
間違ったエンコーディングの文字がブラウザーに読み込まれると、� または ? として表示されます。どこかにエンコーディングの不一致があります:
これらの文字は Unicode UTF-8 で機能するため、DB テーブルの照合順序がutf8_bin
類似していることを確認する必要があります。たとえば、すべてを UTF-8 スウェーデン語で保存する場合は、utf8_swedish_ci
ブラウザーで、コンテンツのエンコードが自動検出に設定されていることを確認します。
MySQL で UTF-8 / utf8_bin テーブルを作成する場合の例を次に示します。
CREATE TABLE `sample` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
既存のテーブルを ALTER して UTF-8 を使用するには、次のコマンドを使用します。
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
この投稿には、使用するかどうかの適切な説明がありますCONVERT TO CHRACTER SET utf8
NoteCHARSET
とCOLLATE
の両方を設定する必要があります。そうしないと、自動的に取得されますCOLLATE=utf8_general_ci
HTML の場合、charset は以下を使用して設定できます。
<meta charset="UTF-8">
Zend_Db_Adapter_Pdo_Mysqlに関しては、コンストラクターが次のようにUTF-8を使用していることを確認してください。
$your_pdo = Zend_Db::factory('Pdo_Mysql', array(
'host' => DATABASE_HOST,
'username' => DATABASE_USERNAME,
'password' => DATABASE_PASSWORD,
'dbname' => DATABASE_DBNAME,
'options' => array( 'charset' => 'utf8' )
) );
そして、HTMLエスケープでデータを使用する前に:
return htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );
Content-Type、ファイルエンコーディングなどに関する他のすべての回答を確認してください。
ブラウザに設定されている「ウェブサイトのエンコード」を確認することをお勧めします。
Web サイトがエンコーディングを提供せず、mysql/php がそれを「正しく」処理している場合、これが発生する可能性があります (たとえば、「western 1252」に設定されていますが、utf8/unicode が必要です)。
Firefox では、ビュー -> エンコーディング (または同様の方法) でエンコーディングを確認できます。
エンコーディングを UTF-8 に正しく設定するだけです。最小限の作業ソリューションの基本的な手順は次のとおりです。
header('Content-type: text/html; charset=utf-8');
のエンコーディングを指定することもできます)php.ini
エンコーディングを上書きしないようにしてください。外部.htaccess
ファイルがある場合は、そうでないことを確認してください。UTF-8 を正しく処理すると、 / などは必要なくなりutf8_encode
、特別な処理をしなくてもアクセント付きの文字を適切に出力できるようになります。utf8_decode
htmlentities
注: 一部のロケールは UTF-8 で処理されません。特にThaïです。