3

エンコーディングについて多くの質問があることは承知していますが、多くのことを確認した後でも、残念ながら問題はまだ存在しています。

PHP/HTML ファイル (zip) と MySQL ダンプ (zip) を Notebook から PC に (git を使用せずに) エクスポートしました。すべてのファイルはUTF-8であり、すべての文字はエディターとデータベース (PHPMyAdmin) に表示されます。

しかし、任意のブラウザでプロジェクトを開くと、一部の文字 (ä、ü、ü、...) が正しく表示されません。

HTML ヘッドには、文字セットを設定するための次の行があります。

<meta charset="utf-8">

この行では、ハードコードされた文字は正しく表示されますが、データベースからの値は正しく表示されません。

行を削除すると、反対の結果が得られます。ハードコードが間違っていて、データベースの値が正しいということです。

内容全体がUTF-8なのですが、PCでは間違って表示されますが、ノートブックでは動作するため、混乱しています。サーバー側に問題があるか、エクスポート プロセスで何か間違ったことをしたと思います。

PHP 関数 utf8_encode() および utf8_decode() を避けたいと思います。

誰かが可能な解決策を知っていますか?

4

1 に答える 1

5

PHP データベース接続オブジェクトの文字セットを必ず設定してください。これは、データベースにクエリを実行する前に行う必要があります。

// tells the mysqli connection to deliver UTF-8 encoded strings.
$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
$db->set_charset('utf8');

// tells the pdo connection to deliver UTF-8 encoded strings.
$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$db = new PDO($dsn, $dbUser, $dbPassword);

上記の例は、SQLI または PDO の文字セットを設定する方法を示しています。このように接続オブジェクトを準備すると、データベース構成から独立した状態になり、必要に応じて、接続は返された/送信されたデータを変換します。

于 2013-07-09T15:59:06.987 に答える