这与拼写错误的德语月份名称显示错误有关,这些月份名称包含特殊字符(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安装中,这将按预期显示:
但是在性能服务器上,我得到了:
该页面上的所有其他特殊字符(包括“ä”)均正确显示,它必须与服务器处理strftime
功能或{{1 }}设置。 FWIW,生成的HTML代码也包含“?”字符而不是“ä”。两种情况下的PHP版本均为5.6。
有什么想法可以使它正确显示吗?
关于可能的重复项的编辑/添加:与字符集元标记(正如我在问题中所述,我设置的)无关,也与编码/解码数据库结果无关。接受的答案中的方法对我来说效果很好,并且该解决方案未在将要重复的内容中提及。
答案 0 :(得分:0)
使用utf8_encode。
$date_german = strftime("%e. %B %Y", $timestamp_start);
$date_german = utf8_encode($date_german);