2013-05-26 2 views
7

간단한 설명을 드리겠습니다. 내 FTP 함수가 파일 이름의 잘못된 인코딩을 반환합니다.PHP - FTP 파일 이름 인코딩 문제

$conn_id = ftp_connect("site.com"); 
ftp_login($conn_id, "login", "pass"); 
ftp_pasv($conn_id, true); 
$buff = ftp_nlist($conn_id, "./"); 
print_r($buff); 

-> // result 
    array() { 
     [0]=> "��.txt" 
    } 

파일 이름은 Windows-1251 인코딩입니다.

nodejs를 통해 FTP에 연결을 시도했지만 이상한 내용도 반환합니다 (òð.txt).

그러나 내 데스크톱 클라이언트 (WinSCP)는 이와 같이 잘 작동합니다.

추신 : utf8_encode를 사용해 보았습니다.하지만 저 역시 효과적이지 않습니다.

+1

헤더 ('Content-Type : text/html; charset = windows-1251')를 추가하면 어떻게됩니까? 당신의 대본에? – herrjeh42

+0

@ jamie0726, 좋은 제안! 또한 올바른 인코딩으로 결과를 반환했습니다. 특정 인코딩으로 파일을 전송해야하는 경우에 대비하여 훌륭한 솔루션이 될 것입니다. 하지만 필자는 각 파일의 인코딩을 자동으로 감지해야합니다. – artnikpro

+0

이 문제는 어떻게 해결할 수 있습니까? – user3770797

답변

9

인코딩이있는 경우 mb_convert_encoding을 사용하여 인코딩을 변경할 수 있습니다. 아래 코드는 올바른 값을 출력해야합니다. 이 작업을 나던 경우

<?php 
echo mb_convert_encoding($buff[0], "UTF-8"); 
//or 
echo mb_convert_encoding($buff[0], "UTF-8", "windows-1251"); 
?> 

, 당신은 먼저 당신의 페이지에 콘텐츠 형식을 추가

<?php 
foreach(mb_list_encodings() as $chr){ 
    echo mb_convert_encoding($buff[0], 'UTF-8', $chr)." : ".$chr."<br>"; 
} 
?> 
+0

감사합니다. Hugo,이'mb_convert_encoding ($ buff [0], "UTF-8", "windows-1251");은 파일명이 windows-1251 인코딩 인 경우에만 작동합니다. 그러나 다른 인코딩이 될 수도 있으므로 자동으로 감지 할 수있는 확실한 방법이 있습니까? 나는'mb_detect_encoding'을 사용하려고했지만 정확한 인코딩을 반환하지 않습니다. ( – artnikpro

+0

check onstackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8 인코딩을 utf-8로 변경 –

+0

@artnikpro 왜 다른 인코딩이 될 수 있다고 생각합니까? 동일한 시스템에 인코딩이 하나만 있지 않습니까? 그렇지 않으면 바이트를 가져옵니다 (char가 아닌). 그것이 무엇인지 말할 수있는 확실한 방법이 없으며, 여러분이 알고있는 모든 것을 인코딩하는 개가 될 수도 있습니다. 그리고 모든 문자를 일부 인코딩에서 키릴 문자로 구문 분석하는 것이 타당한 경우에도, 어떤 언어에서는 실제 단어이지만 모든 사전은 가지고 있습니다.) 그래서 제가 말하고자하는 것은 당신이 (아마도) 생각하고있는 것이 불가능할 때 얻을 수있는 최상의 대답이라는 것입니다. – inkredibl

1

같은 것을 사용하여 올바른 인코딩을 찾기 위해 시도 할 수 있습니다. 다음

header('Content-Type: text/html; charset=utf-8'); 

그리고이 시도

은, 그것이 가장 좋은 방법이 아니다

str_replace(array('%82','%94','+'),array('&#233;','&#246;',' '),urlencode($folder_name)); 

도움이되기를 바랍니다,하지만 당신이 예에 어색한 문자를 변경하는 문자열을 인코딩 URL입니다 경우는, 나를 위해 작동 % 82 ... 그런 다음이를 HTML 코드로 바꿀 수 있습니다.

0

iconv 기능을 사용해 볼 수 있습니다. 그것을 원하면 당신의 문제를 해결할 수 있습니다.

1

많은 (그러나 전부는 아님) ftp 서버가 UTF-8 경로 이름 인코딩을 지원합니다. ftp_nlist 전화를하기 전에 'OPTS UTF8 ON'명령을 실행하여이 기능을 사용할 수 있습니다.

ftp_raw('OPTS UTF8 ON');