2010-08-19 4 views
1

URL에 파일 이름 인코딩을 구현하려고하는데 uri_escape 및 uri_escape_utf8에 이상한 문제가 발생합니다. 불규칙하게 동작하는 것으로 보입니다. 펄 명령 줄 사용Perl uri_escape_utf8 일관성없는 동작 (또는 프로그래머 오류!)

:

[email protected]:$ perl 
use URI::Escape; 
print uri_escape_utf8("\"quotes\"_in_a_filename.pdf"); 
%22quotes%22_in_a_filename.pdf 

완벽한을, 내가 원하는 그냥 뭐. 그럼 내 코드 :

print STDERR uri_escape_utf8("\"quotes\"_in_a_filename.pdf"); 
print STDERR uri_escape("\"quotes\"_in_a_filename.pdf"); 

이 다음 줄 점점 내 응용 프로그램 로그 파일에 결과 :

"quotes"_in_a_filename.pdf 
"quotes"_in_a_filename.pdf 

는 이상하게도, 응용 프로그램의 코드와 동일한 비트가 공백이있는 파일 이름과 함께 완벽하게 잘 작동을하고 (예를 들어)이 제대로 출력 :

my%20pdf%20with%20spaces.pdf 

나는 다소 당황하고 및 솔루션에 대한 다음 볼 위치를 알 수 없습니다. 도움을 주신 모든 분들께 감사드립니다.

건배,

R

+2

첫 번째 예제 프로그램을 실행하면 "_in_a_filename.pdf"따옴표가 표시됩니다. – daxim

답변

5

안전하지 않은 문자의 기본 세트가 URI 분포의 버전 1.53에서 RFC 3986에서 사람들에게 변경합니다 (Changes 파일을 참조하십시오. 불행하게도, 그것은 기본 문자의 목록을 보인다 . 아직 문서에 업데이트되지 않은 오래된 설정했다 :

^A-Za-z0-9\-_.!~*'() 

와 지금

입니다

이는 안전하지 않은 문자에서 "을 제외합니다. 귀하의 응용 프로그램이 다른 펄 인터프리터 또는 URI::Escape 모듈의 다른 라이브러리 위치를 사용하고 있다고 가정합니다. 정확한 문제에 대한 설명이 URI's bugtracker입니다.

편집 : 완전한 일관성을 원하면 안전하지 않은 문자 패턴을 명시 적으로 전달하는 자체 이스케이프 기능을 선언하는 것이 좋습니다.

+0

감사합니다. 많은 감사드립니다! 나는 URI :: Escape가 테스트하고있는 두 개의 다른 환경에서 다를 것이라고 생각했지만, 그것이 어떻게 가능할 것인지, 또는 왜 이렇게 다른지에 대해서는 확신하지 못했습니다. 나 자신의 탈출구를 만들거야. 다시 한 번 감사드립니다. R –

관련 문제