Browse Source

Try to proberly encode formatted date strings returned by strftime()

Fixes #560
Daniel Rudolf 4 years ago
parent
commit
4be1f6ae90
2 changed files with 12 additions and 2 deletions
  1. 1 0
      composer.json
  2. 11 2
      lib/Pico.php

+ 1 - 0
composer.json

@@ -32,6 +32,7 @@
     },
     "require": {
         "php": ">=5.3.6",
+        "ext-mbstring": "*",
         "twig/twig": "^1.36",
         "symfony/yaml" : "^2.8",
         "erusev/parsedown": "1.8.0-beta-7",

+ 11 - 2
lib/Pico.php

@@ -1518,8 +1518,17 @@ class Pico
             }
 
             if (empty($meta['date_formatted'])) {
-                $dateFormat = $this->getConfig('date_format');
-                $meta['date_formatted'] = $meta['time'] ? utf8_encode(strftime($dateFormat, $meta['time'])) : '';
+                if ($meta['time']) {
+                    $encodingList = mb_detect_order();
+                    if ($encodingList === array('ASCII', 'UTF-8')) {
+                        $encodingList[] = 'Windows-1252';
+                    }
+
+                    $rawFormattedDate = strftime($this->getConfig('date_format'), $meta['time']);
+                    $meta['date_formatted'] = mb_convert_encoding($rawFormattedDate, 'UTF-8', $encodingList);
+                } else {
+                    $meta['date_formatted'] = '';
+                }
             }
         } else {
             // guarantee array key existance