我有一个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" />我也试过:
default_charset = "utf8"添加到php.iniutf8_encode中传递表单数据mb_convert_encoding中传递表单数据但这些都没有用。
我在这里有遗漏什么吗?
更新
我看了一下浏览器发送给服务器的头,发现了$_SERVER['HTTP_ACCEPT_CHARSET'] === null
发布于 2012-10-01 22:11:52
在通过给定的PHP链接提交任何其他查询之前,请尝试:
mysql_query('SET NAMES UTF8');此语句表示通过相同的MySQL链接提交的进一步查询将位于UTF8字符集中。
当您希望稍后检索MySQL数据并通过PHP发布到网页时,请确保在header中设置字符集:
header('Content-type: text/html; charset=utf-8');在显示的内容中,...and转换为HTML:
echo mb_convert_encoding($mysql_col_str, 'HTML-ENTITIES', 'UTF-8');(这个最后的语句假设已经定义了一个变量$mysql_col_str,它包含MySQL查询返回的UTF8值)
发布于 2012-10-01 22:07:34
您应该尝试向实体管理器的配置中添加一个名为charset的额外参数:
$conn = array(
'driver' => 'pdo_mysql',
'host' => 'hostname',
'user' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'charset' => 'utf8'
);
$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);https://stackoverflow.com/questions/12680214
复制相似问题