在OSX上使用UTF-8的PHP,而不是在Ubuntu上

时间:2015-10-24 14:12:20

标签: php macos ubuntu encoding utf-8

我正在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上工作正常。

只是想知道是否有人曾经注意到这一点,或者是否有人建议我可以尝试更改/修复我的设置等?感谢

1 个答案:

答案 0 :(得分:0)

好的,在尝试了不同的东西后,这对我有用。

  1. 我的数据库的默认字符集和排序规则是latin1,因此将它们更改为utf8mb4:

    ALTER DATABASE db_name     字符集utf8mb4     默认字符集utf8mb4     收集utf8mb4_general_ci     DEFAULT COLLATE utf8mb4_general_ci     ;

    ALTER TABLE tbl_name     默认字符集utf8mb4     收集utf8mb4_general_ci     

  2. 每次实例化数据库连接时运行SQL SET NAMES utf8mb4;

  3. 此时我正在向浏览器正确发送字符数据,但iconv //TRANSLIT正在删除非字母字符,因此要解决此问题:

    1. 在我的主配置PHP文件的顶部,我添加了setlocale(LC_ALL, 'en_US.utf8');