2012-12-09 4 views
0

PHP에 업로드시 파일 이름을 변경하는 버그가 있습니다 (http://bugs.php.net/bug.php?id=47096 참조). 따라서 함수를 사용하여 파일 이름을 적절한 UTF8로 변환하고 있습니다. 함수의PHP에서 현재 Windows 코드 페이지를 검색하는 방법

심장은 다음과 같습니다

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

관련 문제