我有一个drupal表单,使用Doctrine库将用户输入保存到MySQL数据库中。问题是如果用户输入具有突出显示的字符,则它们在DB中看起来不太好。例如,Sempé
变为Sempé
。这对我来说很奇怪,因为:
varchar(20) COLLATE utf8_swedish_ci NOT NULL,
ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
<form enctype="multipart/form-data" action="/drupal/identification" method="post" id="form-identification" accept-charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
php-&gt; 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
答案 0 :(得分:1)
您应该尝试在实体管理器的配置中添加一个名为charset的额外参数:
$conn = array(
'driver' => 'pdo_mysql',
'host' => 'hostname',
'user' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'charset' => 'utf8'
);
$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);
答案 1 :(得分:1)
在通过给定的PHP MySQL链接提交任何其他查询之前,请尝试:
mysql_query('SET NAMES UTF8');
此声明表明通过相同的MySQL链接提交的其他查询将采用UTF8字符集。
如果您想稍后检索MySQL数据并通过PHP发布到网页,请务必在HTTP标头中设置字符集:
header('Content-type: text/html; charset=utf-8');
...并转换为显示内容中的HTML实体:
echo mb_convert_encoding($mysql_col_str, 'HTML-ENTITIES', 'UTF-8');
(这个最终语句假定已经定义了一个变量 $ mysql_col_str ,其中包含MySQL查询返回的UTF8值)