使用strftime()创建的德语日期内的字符编码

时间:2019-01-23 20:29:47

标签: php wordpress strftime

这与拼写错误的德语月份名称显示错误有关,这些月份名称包含特殊字符(Umlaut,基本上只显示“März”中的字母“ä”(德语为3月))。我试图将其显示为“ 28.März2012”。

这是在BTW的Wordpress中。在标题中,我有<meta charset="utf-8">标记。相应的模板文件包含以下行以获取德语的月份名称:

setlocale (LC_ALL, 'de_AT@euro', 'de_AT', 'de', 'ge');

实际上,该代码是“奥地利德语”的代码,但对于3月=März的月份来说,该代码不会有所不同。

对于该页面,我正在从数据库中获取代表日期的字符串,例如“ 18.03.2012”。然后,我将该字符串转换为“真实的” PHP date()

$date_start = date_create($date_string_from_database);

由于我需要将该日期与另一个时间戳进行比较,因此我将其转换为timestamp(添加20:00的固定时间):

$timestamp_start = strtotime(date_format($date_start, 'Y-m-j 20:00'));

然后在某个时间之后,我从该时间戳中使用带有拼写的德语月份名称创建一个格式化日期,如下所示:

$date_german = strftime("%e. %B %Y", $timestamp_start);

现在,在我的localhost安装中,这将按预期显示:

enter image description here

但是在性能服务器上,我得到了:

enter image description here

该页面上的所有其他特殊字符(包括“ä”)均正确显示,它必须与服务器处理strftime功能或{{1 }}设置。 FWIW,生成的HTML代码也包含“?”字符而不是“ä”。两种情况下的PHP版本均为5.6。

有什么想法可以使它正确显示吗?

关于可能的重复项的编辑/添加:与字符集元标记(正如我在问题中所述,我设置的)无关,也与编码/解码数据库结果无关。接受的答案中的方法对我来说效果很好,并且该解决方案未在将要重复的内容中提及。

1 个答案:

答案 0 :(得分:0)

使用utf8_encode。

$date_german = strftime("%e. %B %Y", $timestamp_start);
$date_german = utf8_encode($date_german);