我有一个 drupal 表单,它使用 Doctrine 库将用户输入保存到 MySQL 数据库中。问题是,如果用户输入有重音字符,它们在 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
- 我所有的 php 脚本,包括告诉 drupal 哪些字段要添加到表单中的脚本)都保存为 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");
我也试过:
- 添加
default_charset = "utf8"
到php.ini utf8_encode
在保存之前传递表单数据mb_convert_encoding
在保存之前传递表单数据
但这些都没有奏效。
我在这里错过了什么吗?
更新
我查看了浏览器发送到服务器的标头并发现$_SERVER['HTTP_ACCEPT_CHARSET'] === null