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

mat*_*att 13 php encoding utf-8 diacritics

我正在使用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;
Run Code Online (Sandbox Code Playgroud)

不过我在某种程度上得到了ä像这样的Umlaut的问号

14. M?rz 2012

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

lor*_*key 38

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

代替:

setlocale(LC_TIME, "de_DE");
Run Code Online (Sandbox Code Playgroud)

使用:

setlocale(LC_TIME, "de_DE.UTF-8");
Run Code Online (Sandbox Code Playgroud)

  • @DanielSteiner作为一种解决方法,将`strftime`调用包装在`utf8_encode`中.有关如何获取所有支持的语言环境的列表,请参阅https://php.net/manual/en/resourcebundle.locales.php. (3认同)

Jvd*_*erg 2

您可以尝试将您的网页设置为 utf-8,并将其放入您的head标签中:

\n\n
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

更新

\n\n

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

\n\n
setlocale(LC_ALL, \'de_DE\');\n$date[0] = mktime( 1, 0, 0, 3, 2, 2012 );\n\n$date_day_month = strftime(\'%d. %B\', $date[0]);\n$date_year = strftime(\'%Y\', $date[0]);\n\necho $date_day_month . $date_year;\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n

02. M\xc3\xa4rz2012

\n

  • 就是这样!非常感谢!我添加了 `setlocale(LC_ALL, 'de_DE.utf8');` 现在它工作得很好! (8认同)