我正在尝试使用strftime
和LC_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))
还是有更清洁的方式?
谢谢!
答案 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
的调用,因为它已不再需要。