8

strftimeで日付をエコーし​​ようとしていますが、utf-8のみの文字でエンコードが正しくありません。(基本的にアクセント文字)

setlocale(LC_TIME, 'spanish');
define("CHARSET", "iso-8859-1");
echo strftime("%A, %d de %B",strtotime($row['Date']));

コードのこの部分に問題はありますか?すべてがutf-8でエンコードされ、その上に「á」文字をエコーすると、文字が正しく表示されます。

4

4 に答える 4

19

utf8_encode()を追加してみてください

setlocale(LC_TIME, 'spanish');
define("CHARSET", "iso-8859-1");
echo utf8_encode(strftime("%A, %d de %B",strtotime($row['Date'])));
于 2012-05-26T08:13:35.873 に答える
11

少し遅れましたが、グーグルでこの投稿を見つけました。そして、私の場合、答えは適切ではありませんでした。OPと同じ問題が発生していますが、ロケールはfr_FRであり、コンピューターではすべて正常に動作しますが、開発サーバーでは正常に動作しません。

iconvを追加すると(ほとんどの人がこの問題をグーグルで検索すると示唆します)、それは開発サーバーでは機能しますが、私のコンピューターでは機能しません。そのため、どこでも同じように機能する「防弾」ソリューションが必要でした(本番環境もあるため)サーバ)。

したがって、ここでの問題はsetlocale、この関数が現在の実行でロケールを変更することですが、すべてのロケールは文字セットに関連付けられており、何も指定されていない場合は、システムのデフォルトのロケールにフォールバックします(私の場合はfr_FRロケールを使用すると、ISO-8859-1にフォールバックしていました)。コマンドを使用して、コンピューター/サーバーで使用可能なすべてのロケールを一覧表示できますlocale -a。ほとんどの場合、「。UTF-8」(私の場合は「fr_FR.UTF-8」)を使用して、必要なロケールが表示されます。これを設定する必要があります。setlocale('fr_FR.UTF-8');

于 2014-11-26T15:47:37.950 に答える
4

多分:

echo iconv("iso-8859-1","utf-8",strftime("%A, %d %B",strtotime($row['Date'])));
于 2012-05-26T08:52:16.973 に答える
0

iconvがない場合は、mb関数を使用して、stftimeでエンコードされた文字列をutf-8に変換できます。

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding());
于 2016-04-13T15:49:28.510 に答える