php strftime 法语字符

php
2022-08-30 14:40:41

我正在一个用户可以在英语和法语之间切换的网站上工作。输出帖子的日期。

如果用户选择法语,我使用:

setlocale(LC_ALL, 'fra_fra');

然后输出我使用的日期:

strftime('%d %B %Y', strtotime($post->post_date));

我在utf-8上有我的字符集:

<meta charset="utf-8">

我遇到的问题是像û这样的字符和其他带有口音的字符只是显示为带有问号的黑色钻石。

有没有办法解决这个问题?


答案 1

这似乎是该功能的问题/错误。strftime

您可以使用以下方法解决它:

$date_string = utf8_encode(strftime('%d %B %Y', strtotime($post->post_date)));

答案 2

内容类型标头需要将代码页设置为 UTF-8。

header('Content-Type: text/html; charset=UTF-8');

由于一旦使用回显打印将任何内容输出到页面,就无法更改页眉,因此请确保在页面的早期进行设置。

ASCII 代码页完全包含在 UTF-8 中,反之亦然。

UTF-8 标头替换为 ASCII 标头,您将看到当字符未包含在当前代码页中时会发生什么情况。

<?php
header('Content-Type: text/html; charset=UTF-8');
//header('Content-Type: text/html; charset=ASCII');

$myDate = "Feb 23, 2011";

$locale = 'fr_FR.UTF-8';
setlocale(LC_ALL, $locale);
echo strftime('%d %B %Y', strtotime($myDate));  

$locale = 'en_US.UTF-8';
setlocale(LC_ALL, $locale);
echo strftime('%d %B %Y', strtotime($myDate));
?>

推荐