2012-12-09 34 views
0
當前的Windows代碼頁

存在着PHP其中軋液對上傳的文件名中的錯誤 - 瞧瞧http://bugs.php.net/bug.php?id=47096。因此,我正在使用函數將文件名轉換爲正確的UTF8。如何檢索在PHP

心臟的功能是:

if ('WIN' == substr(PHP_OS, 0, 3)) { 
      $codepage = 'Windows-' . trim(strstr(setlocale(LC_CTYPE, 0), '.'), '.'); 
      if (function_exists('iconv')) { 
        $filename = iconv('UTF-8', $codepage, $filename); 
      } elseif (function_exists('mb_convert_encoding')) { 
        $filename = mb_convert_encoding($filename, 'UTF-8', $codepage); 
      } 
    }   

這工作得很好用老版本PHP(< 5.2)。然而最近PHP版本的命令

setlocale(LC_CTYPE, 0) 

返回「C」 - 這顯然不是Windows代碼頁,因此轉換失敗。

有沒有一種可靠或可替代的方式來檢索PHP中的當前Windows代碼頁?

回答

3

有趣的是它的工作在舊版本的PHP。在沒有明確設置區域設置的情況下,返回值C表示區域設置尚未設置,並且正在使用默認值。

你可以稱之爲setlocale(LC_CTYPE, '')這將迫使該區域被明確設置爲默認系統區域設置。使用空字符串調用方法的返回值應該是新設置的語言環境(而不是使用0調用,並期望查詢語言環境並將其返回給您,而無需修改)。

空字符串是當前區域設置明確設置爲默認的一種方式,而不是隻查詢它。

+0

謝謝你 - 這奏效了:-) – CarstenSchmitz