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

Php 使用strftime()创建的德语日期内的字符编码,php,wordpress,strftime,Php,Wordpress,Strftime,这是关于拼写错误的德语月份名称的显示,其中包含特殊字符(Umlaut,基本上只有“März”中的字母“ä”-德语表示三月)。我试图把它表现得像“28.März 2012” 这是Wordpress,顺便说一句。在标题中我有标签。相应的模板文件包含以下行以获取德语的月份名称: setlocale (LC_ALL, 'de_AT@euro', 'de_AT', 'de', 'ge'); 实际上,这个代码是“奥地利德语”的,但它不应该对三月=马尔兹有什么区别 对于页面,我从数据库中获取一个表示日期的字

这是关于拼写错误的德语月份名称的显示,其中包含特殊字符(Umlaut,基本上只有“März”中的字母“ä”-德语表示三月)。我试图把它表现得像“28.März 2012”

这是Wordpress,顺便说一句。在标题中我有
标签。相应的模板文件包含以下行以获取德语的月份名称:

setlocale (LC_ALL, 'de_AT@euro', 'de_AT', 'de', 'ge');
实际上,这个代码是“奥地利德语”的,但它不应该对三月=马尔兹有什么区别

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

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

后来,我创建了一个格式化的日期,并根据这个时间戳拼写出德语月份名称,如下所示:

$date_german = strftime("%e. %B %Y", $timestamp_start);
现在,在我的localhost安装中,这将按预期显示:

但在性能服务器上,我得到以下信息:

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

你知道我该怎么做才能让它正确显示吗

关于可能的重复的编辑/添加:这与字符集元标记(我设置了它,正如我在问题中所描述的)无关,也与编码/解码数据库结果无关。被接受的答案中的方法对我来说很有效,并且在文章中没有提到的解决方案可能是重复的。

使用utf8\u编码

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

@johannes还检查服务器系统上可用的区域设置列表。可能存在已支持utf-8的特定区域设置。例如,请参见以下答案:这是一个糟糕的解决方案。只有当区域设置恰好使用ISO-8859-1编码时,它才有效,并且在所有其他情况下都以相同的方式中断。今天PHP版本发生了变化,不幸的是,该方法现在不再有效。我通过包括
setlocale(LC_TIME,“de_AT.UTF-8”)然后
$date\u derman=strftime(“%e.%B%Y”,$timestamp\u start)或者,如果这太笼统了:@miken32好的,后一个可能适用,但是那里的答案与下面的答案不同,这对我来说很好。请检查页面底部的答案。
$date_german = strftime("%e. %B %Y", $timestamp_start);
$date_german = strftime("%e. %B %Y", $timestamp_start);
$date_german = utf8_encode($date_german);