Je pensais avoir trouvé la meilleure solution pour une solution de contournement pour PHP strftime() sur Windows, puis un utilisateur a signalé un problème.Contournement de l'encodage de charset pour strftime() sous Windows?
Windows a certaines limitations à strftime() et en outre il ne prend pas en charge UTF-8. J'ai donc écrit une solution de contournement pour ces deux problèmes, mais trébucher sur les problèmes de jeu de caractères.
C'est ce que mon code ressemble à:
function strftimefixed($format, $timestamp=null) {
if ($timestamp === null) $timestamp = time();
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format); // Don't mind this line
}
return mb_convert_encoding(strftime($format, $timestamp), 'UTF-8', 'auto'); // Charset is the problem
}
Message d'erreur
Attention: mb_convert_encoding(): Impossible de détecter le codage des caractères
Comme vous pouvez le voir « auto 'échoue à identifier l'encodage. L'utilisateur est sur une installation Windows, mais je ne peux pas le coder en 'ISO-8859-2' car cela aidera seulement les utilisateurs tchèques et pas les autres utilisateurs finaux qui n'ont pas la moindre idée de ce qu'est un environnement Windows. ou par quel charset.
Alors, quelle est la meilleure solution pour faire une solution de contournement universelle?
Remarque: Le format n'est pas le problème ici. Cela pourrait être n'importe quoi, comme% b% e% Y% H:% M. L'identification du charset est le problème.
Vous pouvez utiliser mb_detect_encoding()? Les docs PHP.net ont des exemples :) [ici] (http://php.net/manual/fr/function.mb-detect-encoding.php) – pxgamer
mb_detect_encoding() fonctionnerait-il différemment de mb_convert_encoding (... , ..., 'auto')? – tim
Eh bien, il vous permettrait de détecter l'encodage qu'il est actuellement, alors vous pouvez convertir. Bien que, il peut être préférable d'avoir juste une liste déroulante qui sélectionne le pays dans lequel vous êtes (base alors l'encodage sur cela). – pxgamer