Doctrine ライブラリを使用してユーザー入力を MySQL データベースに保存する drupal フォームがあります。問題は、ユーザー入力にアクセント付きの文字が含まれていると、DB で適切に表示されないことです。たとえば、 にSempé
なりSempé
ます。これは私にとって奇妙です。
- 格納されるフィールドはutf8です:
varchar(20) COLLATE utf8_swedish_ci NOT NULL,
- テーブルもutf8です:
ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
- フォームに追加するフィールドを drupal に指示するものを含むすべての私の php スクリプトは、utf-8 として保存されます。
- drupal が作成するフォームは、utf8 を受け入れます。
<form enctype="multipart/form-data" action="/drupal/identification" method="post" id="form-identification" accept-charset="UTF-8">
- drupal が作成するページは、utf8 として送信されます。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
php->mysql 接続は utf8 に設定されています。
$dbParams = array("driver" => "pdo_mysql", "host" => variable_get("dbManip_host"), "user" => variable_get("dbManip_user"), "password" => variable_get("dbManip_password"), "dbname" => variable_get("dbManip_dbName"), "charset" => "utf8");
私も試しました:
- php.ini
default_charset = "utf8"
への追加 utf8_encode
保存する前にフォームデータを渡すmb_convert_encoding
保存する前にフォームデータを渡す
しかし、どれも機能しませんでした。
ここで何か不足していますか?
アップデート
ブラウザからサーバーに送信されたヘッダーを調べたところ、$_SERVER['HTTP_ACCEPT_CHARSET'] === null