【发布时间】:2019-01-23 20:29:47
【问题描述】:
这是关于包含特殊字符的德语月份名称的错误显示(元音变音,基本上只有“März”中的字母“ä” - 三月的德语)。我试图将其显示为“28. März 2012”。
这是在 Wordpress 中,顺便说一句。在标题中,我有 <meta charset="utf-8"> 标签。相应的模板文件包含以下行以获取德语月份名称:
setlocale (LC_ALL, 'de_AT@euro', 'de_AT', 'de', 'ge');
实际上,此代码用于“奥地利德语”,但对于 March = 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 函数或 setlocale 设置的方式有关。 FWIW,生成的 HTML 代码也包含那个“?”字符而不是“ä”。两种情况下的 PHP 版本都是 5.6。
知道我可以做些什么来让它正确显示吗?
关于可能重复的编辑/添加:这与字符集元标记(我设置,正如我在问题中描述的那样)无关,也与编码/解码数据库结果无关。已接受答案中的方法对我来说效果很好,并且该解决方案未在重复中提及。
【问题讨论】:
-
@miken32 好的,后一种可能适用,但那里的答案与下面的答案不同,这对我很有效。
-
查看页面底部的答案。