格式字符串中的strftime编码问题

时间:2016-05-02 09:23:15

标签: php datetime encoding format

我正在尝试使用strftimeLC_TIME的法语区域设置格式化日期。我有一个编码问题,不是日期本身,而是格式字符串。

让我解释一下;在我的示例中,$format%A %d %B à %Hh%M,而$time日期是八月的某个地方。

我首先开始使用此strftime($format, $time),它给了我Vendredi 05 Ao�t à 11h57

我想解决编码问题,所以我这样做了:utf8_encode(strftime($format, $time)),它给了我这个:Vendredi 05 Août à 11h57

您可以看到août上的编码问题消失了,但是格式字符串的à上出现了一个。

我该如何解决这个问题?我必须做utf8_encode(strftime("%A %d %B", $time)) . " à " . utf8_encode(strftime("%Hh%M", $time))还是有更清洁的方式?

谢谢!

2 个答案:

答案 0 :(得分:6)

根据上面的输出示例,我猜你的源文件是UTF-8(所以à是UTF-8编码的),你的输出HTML也是用UTF-8字符发送的组。问题似乎是您使用的是非UTF-8法语区域设置,因此strftime()返回的字符串不是 UTF-8,而是像ISO-8859- 1或ISO-8859-15。

所以要么你坚持使用繁琐的方法将结果字符串的一部分转换为UTF-8(utf8_encode(strftime("%A %d %B", $time)) . " à " . utf8_encode(strftime("%Hh%M", $time)),要么选择法语区域设置的UTF-8变体。在Linux上应该像{ {1}}。

以下适用于Mac OS X(附带PHP 5.5):

fr_FR.UTF-8

同时在命令行上检查运行<?php setlocale(LC_TIME, 'fr_FR.UTF-8'); echo strftime('%A %d %B à %Hh%M', strtotime('2016-08-12 12:00:00')); // Vendredi 12 août à 12h00 的系统支持的本地人。

答案 1 :(得分:1)

解决方案是使用fr_FR.UTF-8区域设置并删除对utf8_encode的调用,因为它已不再需要。