2013-11-24 124 views
0

我有這樣的代碼在PHP中的日期轉換爲自己的區域PHP - 用另一種語言的strftime輸出亂碼

$date = time(); 
$locale_code = 'en_NZ'; 
$format_full_date = '%e %B %Y at %l:%M %P'; // 21 August 2013 at 3:26 am 

// Set locale 
setlocale(LC_ALL, $locale_code); 

// Get date 
$locale_date = strftime(lang('format_full_date'), $date); 

// Reset locale 
setlocale(LC_ALL, 0); 

這工作正常en_NZ。輸出是一樣的東西21 August 2013 at 8:26 pm

但是,當我改變locale_code到fr_CA,我得到輸出21 ao�t 2013 at 8:26

這裏有兩個問題

  • 爲什麼法國August翻譯亂碼?
  • 爲什麼am/pm沒有顯示?

回答

1

我猜strftime以不同於當前內容編碼的編碼輸出。確保它們匹配或進行轉換。 utf8_encode/utf8_decode可能派上用場。

八月法文是août。

+0

最簡單的方式就是使用UTF-8網頁編碼,即'' – Phil

+0

我不想妄下結論,但它是很可能''strftime'輸出在'utf8';它可能也取決於語言環境。 – Halcyon

+1

我已經在使用''所以它不是一個解決方案。 – arvinsim

0

我懷疑它是用unicode編碼做的。試試這個:

setlocale(LC_ALL, $localecode); 
echo utf8_encode(strftime(lang('format_full_date'), $date); 
+0

感謝您的迴應。但是,我還沒有看到上午/下午的時間。這是一個地方的東西? – arvinsim

+0

@arvinsim法國人沒有上午和下午的話(他們使用'du matin'for'am','de l'après-midi'從中午到下午6點左右,'晚上6點起來',所以我的懷疑是它就是這樣做的 – hammus

相關問題