我正在Macbook(OSX)上构建一个PHP站点,并将其部署在Ubuntu 12.04服务器上。我在两者上使用类似版本的PHP(5.5.27与5.5.30)和nginx(1.6.2与1.8)。我尝试遵循UTF-8最佳做法,例如使用mb_internal_encoding('UTF-8')
和mb_http_output('UTF-8')
,以及在我的标头中使用header('Content-type: text/html; charset=UTF-8');
和<meta type="text/html" charset="UTF-8" />
。我的数据以UTF-8正确存储在两个数据库中,当我在Ubuntu服务器上查询数据库时,我可以看到非标准字符,例如é。
在OSX上一切正常,但非标准字符不会呈现给Ubuntu机器上的浏览器。当我从标题中删除<meta type="text/html" charset="UTF-8" />
时,事情会有所改善。我没有在任何地方使用PHP的mb_
字符串函数,我知道这可能会导致一些问题,但我不明白为什么在OSX而不是Ubuntu上工作正常。
只是想知道是否有人曾经注意到这一点,或者是否有人建议我可以尝试更改/修复我的设置等?感谢
答案 0 :(得分:0)
好的,在尝试了不同的东西后,这对我有用。
我的数据库的默认字符集和排序规则是latin1,因此将它们更改为utf8mb4:
ALTER DATABASE db_name 字符集utf8mb4 默认字符集utf8mb4 收集utf8mb4_general_ci DEFAULT COLLATE utf8mb4_general_ci ;
ALTER TABLE tbl_name 默认字符集utf8mb4 收集utf8mb4_general_ci
每次实例化数据库连接时运行SQL SET NAMES utf8mb4;
此时我正在向浏览器正确发送字符数据,但iconv
//TRANSLIT
正在删除非字母字符,因此要解决此问题:
setlocale(LC_ALL, 'en_US.utf8');