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