2

例として次のコードを使用しています

$locale = 'cy_GB';
setlocale ( LC_MONETARY  , $locale );
$conv = localeconv();           
$currencyRateSymbol = $conv['int_curr_symbol'];
var_dump($currencyRateSymbol);

問題は、string '�' (length=1)探しているときに取得していることです£

これは、バーツ、ポンド、ユーロなど、私が使用するすべてのロケールで発生しています。私は何を間違っていますか?

4

1 に答える 1

3

length=11 バイト長であることを意味します。"�" は、Unicode として表示しようとしていて、Unicode デコーダーがこのバイトを正しくデコードできなかったことを意味します。UTF-8 でエンコードされた £ 記号は 2 バイトです。

エルゴ...

£ 記号は UTF-8 でエンコードされていませんが、UTF-8 としてデコードしようとしているため、失敗します。

システムに存在する場合はロケールの UTF-8 バージョンを使用するcy_GB.UTF-8か (例: )、これを表示しようとしているクライアントに正しいエンコーディングを指定します (おそらく ISO-8859-1)。

于 2012-11-02T15:27:18.057 に答える