我有三个数据库环境,MAMP,测试服务器,实际服务器。测试服务器只是一个不使用其数据库的旧站点。
在MAMP和测试服务器上,我需要显示的重音字母显示正常(即字体不是问题)í á ñ
,但是在实际的服务器上我得到那些可爱的黑色问号方块 。
所以我猜测它是charset并且调查它但是所有的DB都有相同的charset latin1_swedish_ci
。
我使用in this post描述的方法检查了设置,然后在SQL中运行SET NAMES 'utf-8';
,但问题仍然存在。
我还更改了数据库和所有单个表上的字符集,但这似乎没有效果。
我能够影响浏览器解释文本的方式的唯一方法是将META
更改为latin1
,实际上我正在使用ini_set('default_charset', 'utf-8');
。这里的问题是它用各种随机符号替换 。
有人可以帮我确定原因吗?我没有想法。
我正在使用SublimeText2,这可能是问题吗?我尝试用UTF编码保存它,这也没有太大作用。
答案 0 :(得分:2)
如果你看到 UNICODE REPLACEMENT CHARACTER,那意味着数据被解释为 UTF-8(或其他Unicode编码),但不是实际上是有效的UTF-8 。覆盖浏览器以解释其他编码中的数据(查看菜单→大多数浏览器中的编码),以确定实际编码的数据。一旦你想到了这一点:
mysql_set_charset
,SET NAMES ...
或类似的,具体取决于您的API)来完成此操作。由于MySQL将编码转换为连接编码,因此各列的整理和编码无关紧要。Content-Type
HTTP标头和/或<meta>
标签来更改声明的编码; ini_set('default_charset', ...)
会这样做,但Web服务器可能会覆盖它。使用浏览器工具检查实际的HTTP标头。首先确保数据库中的数据确实没问题且不是垃圾。如果您需要更多信息,请参阅What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text和Handling Unicode Front To Back In A Web App。