파일 이름 인코딩 문제


9

faroese 이름을 가진 파일을 가져 와서 PHP 스크립트에 저장하려고합니다.

2010_08_Útflutningur.xls

우분투 10.04에서 LTS는 다음과 같이 저장합니다.

2010_08_�tflutningur.xls (invalid encoding)

설치하고 실행 utf8-migration-tool했지만 아무런 효과가 없습니다.

이것은 내가 고칠 수있는 우분투 오류입니까, 아니면 PHP에서 이름을 포기하고 수정해야합니까?

우분투에서 파일 이름에 허용되는 문자 집합이 무엇인지 또는 인코딩 사양이 무엇인지 설명하는 문서가 있습니까?

감사


PHP를 통해 파일을 어떻게 받고 저장합니까? (코드는 어떤 모양입니까?)
Kees Cook

이메일 시스템에서 파싱했습니다. 코드는 복잡하다 :)
Elzo Valugi

비슷한 Q & A 수리 깨진 파일 이름을 스크립트와 함께.
lumbric

답변:


5

이것은 인코딩 문제처럼 보입니다. 불행히도, PHP는 기본적으로 1 바이트 문자열이기 때문에 인코딩과 관련하여 약간의 핸드 홀드가 필요합니다. PHP 내에서 파일 이름을 만드는 경우 utf8_encode()도움이 될 것입니다. 그러나 입력에 대해서는 ISO-8859-1 인코딩을 가정합니다.

반면에 클라이언트가 제출 한 파일 이름을 사용하는 경우 클라이언트가 인코딩을 수행하도록 요청할 수 있습니다. 이는 태그 의 accept-charset속성 <form>및 / 또는 양식이있는 페이지의 문자 집합을 설정하여 수행됩니다. 특정 클라이언트는 둘 중 하나를 사용할 수 있으므로 최상의 결과를 얻으려면 각각 UTF-8을 사용하십시오.


7

기본적으로 Ubuntu는 파일 이름으로 UTF-8을 사용합니다. 대부분의 최신 Linux 배포판과 다른 많은 운영 체제가 그렇게합니다 (Windows / NTFS는 UTF-16에서 가장 잘 알려진 예외입니다).

표시하는 것과 같이 잘못된 인코딩으로 이름이있는 파일을 수정하려면 사용하십시오. nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

PHP iconv함수를 사용하여 문자열 (파일 이름)을 한 인코딩에서 다른 인코딩으로 변환 할 수 있습니다 . 물론 어떤 인코딩을 시작해야하는지 알아야합니다.

클라이언트에서 올바르게 인코딩 된 파일 이름을 얻으려면 eswald가 설명하는 기술을 사용해보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.