natinusala
natinusala

Reputation: 616

strftime encoding issue within format string

I'm trying to format dates using strftime and a French locale for LC_TIME. I've got an encoding issue, not for the dates themselves but within the format string.

Let me explain ; in my examples, $format is %A %d %B à %Hh%M and the $time date is somewhere in august.

I first started with this : strftime($format, $time), and it gave me Vendredi 05 Ao�t à 11h57.

I wanted to solve the encoding problem, so I did this : utf8_encode(strftime($format, $time)), which gave me this : Vendredi 05 Août à 11h57.

You can see that the encoding problem on août is gone, but one has appeared on the à of the format string.

How may I fix this ? Do I have to do utf8_encode(strftime("%A %d %B", $time)) . " à " . utf8_encode(strftime("%Hh%M", $time)) or is there a cleaner way ?

Thanks !

Upvotes: 4

Views: 2745

Answers (2)

natinusala
natinusala

Reputation: 616

The solution was to use the fr_FR.UTF-8 locale and remove the call to utf8_encode as it's no longer necessary.

Upvotes: 2

Stefan Gehrig
Stefan Gehrig

Reputation: 83622

Given the output examples above, I'd guess that your source file is UTF-8 (so the à is UTF-8 encoded) and your output HTML is also sent with a UTF-8 character set. The problem seems to be that you're using a non-UTF-8 French locale so the returned string from strftime() is not UTF-8 but rather something like ISO-8859-1 or ISO-8859-15.

So either you stick with the cumbersome approach of converting only parts of your result string to UTF-8 (utf8_encode(strftime("%A %d %B", $time)) . " à " . utf8_encode(strftime("%Hh%M", $time)) or you select a UTF-8 variation of the French locale. On Linux that should be something like fr_FR.UTF-8.

The following works on Mac OS X (with shipped PHP 5.5):

<?php
setlocale(LC_TIME, 'fr_FR.UTF-8');
echo strftime('%A %d %B à %Hh%M', strtotime('2016-08-12 12:00:00'));

// Vendredi 12 août à 12h00

Also check the locals supported by your system running locale -a on the command line.

Upvotes: 9

Related Questions