我有一段 PHP 代码,它是在 Windows 7 机器上用 notepad++ 编写的
notepad++ 中的编码设置为“编码为 ANSI”(ASCII)
我是他们在我的代码中这样做:
utf8_encode("£")
所以我肯定会得到英镑符号的 utf 友好版本。
在本地服务器上一切正常。
但是当我将它推送到我的实时服务器时,我在 php.ini 中遇到了各种 utf8 编码错误的问题。
git push/pull 过程中的某些东西是否会破坏它,或者它可能是实时服务器上的语言环境设置?
本地和实时服务器都运行 ubuntu 12.04
谢谢
更新 1
我得到的实际错误是
invalid byte sequence for encoding "UTF8": 0xa3'
(这是 Postgres SQL 错误)
本地和现场的其他区别是现场是通过 https 而本地只是 http(都是 apache)
更新 2
跑步:
file -bi script.php
本地和现场产品:
text/x-php; charset=iso-8859-1
所以看起来文件的编码是完整的?
更新 3
查看本地 Postgres 安装,它具有以下设置:
ENCODING = 'UTF8'
LC_COLLATE = 'en_GB.UTF-8'
LC_CTYPE = 'en_GB.UTF-8'
而 live 有:
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
我将看看是否可以交换整理类型以匹配本地,看看是否有帮助
更新 4
我正在这样做,这最终导致现场(非本地)代码失败
setlocale(LC_MONETARY, 'en_GB');
$equivFinal = utf8_encode("£") . money_format('%.2n', $equivFinal);
更新 5
我越来越接近这个问题了。
在本地,字符串生成为
£1.00
在现场,字符串产生为
£�1.00
因此,由于某种原因,实时服务器在进行 UTF8 转换时添加了更多废话
更新 6
好的,所以我将其固定为:
setlocale(LC_MONETARY, 'en_GB');
Logger::getInstance(__NAMESPACE__)->info("TEST 01= " .money_format('%.2n', 1.00));
在本地它输出
TEST 01= 1.00
正如预期的那样
在现场输出
TEST 01= �1.00
将随机字符添加到开头,这就是导致我的 utf8 问题的原因,因为它正在喋喋不休。
知道为什么money_format 会在一台服务器上而不是另一台服务器上这样做吗?