0

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.inidefault_charset = "utf8"への追加
  • utf8_encode保存する前にフォームデータを渡す
  • mb_convert_encoding保存する前にフォームデータを渡す

しかし、どれも機能しませんでした。

ここで何か不足していますか?

アップデート

ブラウザからサーバーに送信されたヘッダーを調べたところ、$_SERVER['HTTP_ACCEPT_CHARSET'] === null

4

2 に答える 2

1

Entity Manager の構成に charset という追加のパラメーターを追加してみてください。

$conn = array(
  'driver' => 'pdo_mysql',
  'host' => 'hostname',
  'user' => 'user',
  'password' => 'pass',
  'dbname' => 'dbname',
  'charset' => 'utf8'
);

$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);
于 2012-10-01T22:07:34.157 に答える
1

特定の PHP MySQL リンクを介して他のクエリを送信する前に、次のことを試してください。

mysql_query('SET NAMES UTF8');

このステートメントは、同じ MySQL リンクを介して送信される以降のクエリが UTF8 文字セットになることを示しています。

後で MySQL データを取得し、PHP を介して Web ページに公開する場合は、必ず HTTP ヘッダーに文字セットを設定してください。

header('Content-type: text/html; charset=utf-8');

...そして、表示されたコンテンツの HTML エンティティに変換します。

echo mb_convert_encoding($mysql_col_str, 'HTML-ENTITIES', 'UTF-8');

(この最後のステートメントは、MySQL クエリによって返される UTF8 値を含む変数$mysql_col_strが定義されていることを前提としています)

于 2012-10-01T22:11:52.723 に答える