strftime日期格式化的德语变音符号 - 正确的utf-8编码?

时间:2012-10-01 20:38:44

标签: php encoding utf-8 diacritics

我使用PHP 14. März 2012(2012年3月14日)创建了这样的德语日期格式。

我正在使用包含unix时间戳的$date[0],并将其转换为可读的德国日期。

$date_day_month = strftime('%d. %B', $date[0]);
$date_year = strftime('%Y', $date[0]);

echo $date_day_month . $date_year;

但是我以某种方式得到了像这样的变形虫ä的问号

14. M�rz 2012

为什么会这样,我该如何解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:37)

在我的情况下,简单更改区域设置就可以了。

而不是:

setlocale(LC_TIME, "de_DE");

使用:

setlocale(LC_TIME, "de_DE.UTF-8");

答案 1 :(得分:3)

在Windows环境(XAMPP)中,setlocale(LC_TIME, "de_DE.UTF-8")没有为我解决问题,因此我使用了区域设置"de"然后 - 正如@Chris在对another answer的评论中所建议的那样 - 手动将字符串转换为utf8:

setlocale(LC_TIME, "de");
$maerzLatin1 = strftime('%B', mktime(9, 0, 0, 3, 1, 2016));
$maerzUtf8 = utf8_encode($maerzLatin1);  // this one contains "März" UTF8-encoded

答案 2 :(得分:2)

您可以尝试将您的网页设为utf-8,将其放在head标记中:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

strftime取决于区域设置的正确设置,因此请检查setlocale()并确保php已运行的计算机上存在区域设置。

<强>更新

我在服务器上运行了这段代码:

setlocale(LC_ALL, 'de_DE');
$date[0] = mktime( 1, 0, 0, 3, 2, 2012 );

$date_day_month = strftime('%d. %B', $date[0]);
$date_year = strftime('%Y', $date[0]);

echo $date_day_month . $date_year;

那产出:

02. März2012