Windows 7 マシンの notepad++ で書かれた PHP コードがあります。
notepad ++のエンコーディングは「ANSIにエンコード」(ASCII)に設定されています
私は彼らが私のコードでこれをやっています:
utf8_encode("£")
そのため、必ず utf フレンドリー バージョンの £ 記号を取得します。
すべてがローカルサーバー上で完全に正常に動作します。
しかし、ライブサーバーにプッシュすると、php の 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'
一方、ライブには次のものがあります。
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 があるサーバーでそれを行い、別のサーバーでは行わない理由は何ですか?