Php 格式字符串内的strftime编码问题

Php 格式字符串内的strftime编码问题,php,datetime,encoding,format,Php,Datetime,Encoding,Format,我正在尝试使用strftime和lcu-TIME的法语区域设置格式化日期。我有一个编码问题,不是日期本身,而是在格式字符串中 让我解释一下;在我的示例中,$format是%A%d%Bá%Hh%M,$time日期是8月份的某个地方 我首先从以下内容开始:strftime($format,$time),它给了我vendredi05ao�tá11h57 我想解决编码问题,所以我这样做了:utf8_编码(strftime($format,$time)),这给了我:Vendredi 05 AotÃ11h

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

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

我首先从以下内容开始:
strftime($format,$time)
,它给了我
vendredi05ao�tá11h57

我想解决编码问题,所以我这样做了:
utf8_编码(strftime($format,$time))
,这给了我:
Vendredi 05 AotÃ11h57

您可以看到,
aoāt
上的编码问题消失了,但在格式字符串的
a
上出现了一个问题

我怎样才能解决这个问题?我是否必须进行utf8编码(strftime(“%A%d%B”,$time))呢。" à " . utf8_编码(strftime(“%Hh%M”,$time))还是有更干净的方法


谢谢

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

因此,您要么坚持只将结果字符串的一部分转换为UTF-8(
utf8_编码(strftime(“%A%d%B”,“$time”)),“A”).utf8_编码(strftime(“%Hh%M”,“$time”)
,要么选择法国语言环境的UTF-8变体。在Linux上,这应该类似于
fr\u fr.UTF-8

以下内容适用于Mac OS X(附带PHP5.5):


解决方案是使用
fr\u fr.UTF-8
区域设置并删除对
utf8\u encode
的调用,因为它不再需要了。

您的确切区域设置是什么?文件的字符编码是什么?HTML输出的字符集是什么(假设您的输出是HTML)?您使用的是什么操作系统(Linux或Windows或其他什么)?我的确切区域设置是
fr_fr
fr_fr.UTF-8
在这里没有区别)。文件的编码是UTF-8,HTML的字符集也是UTF-8,我在Linux上。我尝试使用
fr_fr.UTF-8
,在问题上没有区别。请检查
setlocale()的返回值
。如果返回
false
则出现故障。不同的系统具有不同的区域设置命名方案。请检查系统上支持的区域设置(
locale-a
fr\u fr.UTF-8
似乎作为
setlocale(…)存在
返回
fr_fr.UTF-8
。对于UTF-8语言环境,唯一的区别是双断字符串:
Vendredi 05 AoûtÃ11h57
如果切换到
fr_fr.UTF-8
则必须删除
utf8_encode()
调用。您的示例现在似乎是双编码的。
<?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