我正在开发一个项目,其中mySQL表有一个数据类型为TEXT的字段,而collation是utf8_general_ci,表格排序(出于某种未知原因)设置为utf8_unicode_ci。
mysql -V输出为“mysql Ver 14.12 Distrib 5.0.51a,debian-linux-gnu(x86_64)使用readline 5.2”
PHP版本为5.2。
此字段中某些行的数据是“[Dan S. Leyrer?]”。如果从命令行查询记录,它看起来很好。如果你在phpMyAdmin中查看或编辑记录,它在Chrome和IE9中看起来很好。但是当字段显示在IE9,Chrome,FF等中作为PHP脚本输出的一部分时,问号显示为撇号“[Dan S. Leyrer']”。尝试在IE9和Chrome中的phpMyAdmin和通过命令行从mySQL监视器编辑,并且没有看到显示的变化。
不可否认,我试图添加对utf8_encode(),utf8_decode(),htmlentities()的调用。没效果。
我尝试编辑其他字段,最后我发现添加了一个“?”使用数据类型TEXT的任何字段在PHP输出中显示此问题,但具有相同utf8_general_ci排序规则的VARCHAR字段没有问题。
那里发生了什么?
我向所有努力帮助我的人致歉。
我的前任在他的意大利面条代码中对此字符串应用了一些处理。我没有意识到这一点。我认为这是解决UTF8问题的努力:
function scrub_string($input_string) {
$replace_array = array( "?","\x92","?","\x91" );
$input_string = str_replace($replace_array,"'",$input_string);
$output_string = utf8_encode($input_string);
return $output_string;
}
我非常抱歉浪费时间......来到新奥尔良,我正在买啤酒。
答案 0 :(得分:2)
显然,您的数据库连接字符集(使用SET NAMES设置)与您的浏览器所期望的字符集不同(Firefox页面信息 - >编码)。
尝试将两者都设置为UTF-8:
mysql_set_charset('utf8'); // SET NAMES utf8
header('Content-Type: text/html; charset=utf-8');
答案 1 :(得分:1)
使用的排序规则仅确定数据在数据库中的存储和处理方式,它不会影响用于将数据传输到客户端的字符集。后者可以用mysql_set_charset下注。尝试将连接设置为用于生成的输出文档的相同字符集,这可能会有所帮助。