2010-05-22 3 views
1

나는 현재 폴더를보고 RSS 피드의 모든 파일 이름 목록을 반환하는 간단한 스크립트를 작성하려고합니다. 그러나 나는 주요한 벽에 부딪쳤다 ... 내가 일본어 문자로 된 파일 이름을 읽을 때마다 그것들을?로 나타낸다. 나는 여기에 언급 된 솔루션을 시도했다 : php readdir problem with japanese language file name를 - 그들은 심지어와 함께, 어떤 이유로 작동하지 않습니다하지만 (나는이 밖으로 정렬 할 수있을 때까지 일반 텍스트로 내보내기) 상단에PHP 5.3 및 Windows Vista에서 일본어 파일 이름을 사용합니까?

header('Content-Type: text/html; charset=UTF-8'); 
setlocale(LC_ALL, 'en_US.UTF8'); 
mb_internal_encoding("UTF-8"); 

.

어떻게해야합니까? 이 일이 필요하고 시간이별로 없습니다.

+0

당신이하려고 않았다 어떤 페이지 속성을 얻었는지 확인하십시오. Firefox (오른쪽 클릭 - 페이지 정보)를 사용하면 인코딩 : UTF-8이 있어야합니다. 그렇지 않으면 헤더에 뭔가 잘못되었습니다. –

+0

그래, UTF-8로 설정되어있다. – Jon

+0

나는 이것을위한 해결책이 없다고 생각한다. PHP는 Windows api의 유니 코드 버전을 내부적으로 사용하지 않으며 멀티 바이트 버전은 UTF-8을 코드 페이지로 허용하지 않습니다. – Artefacto

답변

1

PHP로 할 수 있습니다. 디렉토리를 읽고 PHP에서 해당 프로그램을 호출하는 작은 C 프로그램을 작성하십시오.

은 참조 : http://en.literateprograms.org/Directory_listing_(C,_Windows) http://www.daniweb.com/forums/thread74944.html http://forums.devshed.com/c-programming-42/reading-a-directory-in-windows-36169.html

+0

당신은 이것을 PHP로 호출합니까? : p 그것은 받아 들여질 수있는 해결 방법입니다. – Artefacto

1

이것은 불가능합니다. 그것은 PHP 자체의 한계입니다. PHP는 넓은 WIN32 API 호출을 사용하지 않으므로 코드 페이지로 제한됩니다. UTF-8 (65001)은이 용도로 유효하지 않습니다.

당신이 win32\readdir.c에서 readdir_r()에서 중단 점을 설정하면 FindNextFile 이미 당신이 원하는 문자 대신에 물음표와 파일 이름을 반환하는 것을 볼 수 있습니다, 그래서 당신은 떨어져 PHP 자체를 패치에서, 그것에 대해 할 수있는 아무것도 없다.

+0

음, 그게 ...PHP는 옵션이 아니기 때문에 Window의 파일 이름 인코딩을 처리하는 대체 언어는 무엇입니까? 난 그냥 정확한 경로와 다른 간단한 텍스트와 함께 폴더에있는 파일 이름의 RSS 피드를 내보낼 필요가있다. – Jon

+0

자바를 사용하는 것이 좋습니다. ROME (https://rome.dev.java.net/)은 매우 훌륭한 RSS 라이브러리입니다. – Artefacto

1

이, Windows 서버

if ($handle = opendir($this->dir)) { 
    while (false !== ($file = readdir($handle))){ 
     $name = mb_convert_encoding($file, "UTF-8", "SJIS-win"); 
     echo "$name<br>"; 
    } 
    closedir($handle); 
} 
2
function fx_dir_utf8 ($path) 
{ 
    // use this as failback on windows for usual dir listing 
    // give it a UTF-8 path and receive a UTF-8 listing 
    $path  = iconv ('UTF-8', 'UTF-16LE', $path); 
    $cmd  = 'cmd /U /C dir '. str_replace ('/', '\\', $path); 
    // windows command line returns CP850 or UTF-16LE 
    $dir_str = shell_exec ($cmd); 
    $dir_str = iconv ('UTF-16LE', 'UTF-8', $dir_str); 
print_r ($dir_str); 

    // further parse $dir_str 
    return ($dir_str); 
} 
1

아니, 그래 제대로 다른 사람이 그것을 언급 한 바와 같이, PHP 는 할 수없는 일본어 파일 이름을 표시합니다 할 ... 부끄러운 PHP! 여기 (

일부는 C를 제안하지만, 개인적으로 나는 파이썬 훨씬 더 간단/매력 발견 : 다른 사람으로

도 하나 개의 대안이 그 파일 이름을 읽을 수있는 다른 언어로 프록시를 작성할 수, 제안 파이썬 3).

** 하면이 **

$success = (bool)(int)shell_exec('python -c "import os;'. 
    'os.chdir(\''.$dir.'\'); '. 
    'import urllib.parse; '. 
    'file_list = tuple(map(urllib.parse.quote_plus, os.listdir())); '. 
    'print(int(\''.urlencode($_GET['src']).'\' in file_list and \''.urlencode($_GET['src'].'.part').'\' not in file_list))"' 
); 

그래, 꽤하지를 사용하기 전에 변수를 소독해야하지만,이 조각 날을 보내고 'urlencode에 의해 파일 이름에 대해 확인할 수있었습니다.

(Ndla :. 파일이 API를 엉망으로하지 않고 파이어 폭스 다운로드 할 때 특정 조각을 발견하는 데 사용되었다 최고는 아니하지만 WORKING 및 설정에 빠르게)

관련 문제