LAMP スタックでエンコードの問題が発生しています。
Web ページのヘッダーには次のものがあります。
私の PDO dsn は次のとおりです: mysql:host=localhost;dbname=$database;charset=utf8
オプション配列は次のとおりです。
options = array (
// PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
PDO::MYSQL_ATTR_INIT_COMMAND; を設定する場合と設定しない場合の両方を試しました。どちらの方法でも同じ結果が得られます。
次のような方法でデータベースから取得します。
$sql = 'SELECT * FROM ...';
$prepared = $dbh->prepare($sql);
$prepared->execute()
while ($row = $prepared->fetch(PDO::FETCH_ASSOC)) {
...
}
バインドされたパラメーターはありません。
データベース、すべてのテーブル、およびすべての文字列 (CHAR、VARCHAR、TEXT) 列の照合は、utf8_unicode_ci です。
たとえば、データベースに (phpMyAdmin によって挿入されたように) 18 インチ x 24 インチある場合、入力フィールドとテキストエリア フィールドでは 18 インチ x 24 インチになりますが、フォームの外にエコーされると 18 インチ x 24 インチになります。
データベースに 18"x24" がある場合、入力フィールドとテキストエリア フィールドには 18"x24" が表示されますが、フォームの外にエコーされると 18"x24" になります。
18 インチ x 24 インチ (18 インチ x 24 インチでも 18 インチ x 24 インチでもない) を取得して、フォーム フィールドの内側と外側の両方を表示するにはどうすればよいですか?