15

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

我正在使用$date[0]它包含一个 unix 时间戳,并且我将它这样转换为可读的德语日期。

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

echo $date_day_month . $date_year;

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

14. M�rz 2012

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

4

3 回答 3

46

在我的情况下,一个简单的语言环境改变就可以了。

代替:

setlocale(LC_TIME, "de_DE");

采用:

setlocale(LC_TIME, "de_DE.UTF-8");
于 2013-08-14T10:45:17.453 回答
3

在 Windows 环境(XAMPP)中,setlocale(LC_TIME, "de_DE.UTF-8")并没有为我解决问题,所以我求助于使用语言环境"de",然后 - 正如@Chris 在他对另一个答案的评论中建议的那样- 将字符串手动转换为 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
于 2016-02-23T15:31:59.593 回答
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

于 2012-10-01T20:42:28.280 回答