这是关于拼写出的包含特殊字符的德语月份名称的错误显示(umlaut,基本上只有字母“m_·rz”中的“_·rz”——德语表示三月)。我想把它展示得像“28”。M·R z 2012”。
这是WordPress,顺便说一句。在标题中我有
<meta charset="utf-8">
标签。相应的模板文件包含以下行,以获取德语中的月份名称:
setlocale (LC_ALL, 'de_AT@euro', 'de_AT', 'de', 'ge');
实际上,这个代码是针对“奥地利德语”,但对于3月份=m_¥rz,它不应该有什么区别。
对于页面,我从数据库中获取一个表示日期的字符串,例如“18.03.2012”。然后我将该字符串转换为“real”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);
现在,在我的本地主机安装中,这将按预期显示:
但是在性能服务器上,我得到了:
该页上的所有其他特殊字符(包括“_”)都正确显示。
,它必须与服务器处理
strftime
函数或
setlocale
设置。fwiw,生成的HTML代码也包含“?”字符而不是“_·”。在这两种情况下,PHP版本都是5.6。
知道我该怎么做才能使它正确显示吗?
关于可能重复的编辑/添加:这与charset meta标记(如我在问题中所述,我设置了该标记)无关,也与编码/解码数据库结果无关。接受的答案中的方法对我很有效,并且在中没有提到该解决方案是重复的。