어제 프로젝트를 진행하면서 요구 사항 중 하나는 각 그림이 그림을 설명하는 짧은 텍스트 단락과 일치해야 한다는 것이었습니다. 일반적인 방법은 새 테이블을 만들고 그림 이름과 설명을 데이터베이스에 기록하는 것입니다. 신중하게 고려한 결과, 제가 구현한 솔루션은 설명 텍스트 URLENCODE를 파일 이름으로 사용하여 파일을 읽을 때 파일 이름 URLDECODE를 사용하여 구동할 수 있다는 것을 느꼈습니다. 그림의 텍스트 설명입니다.
그런데 브라우저를 통해 이미지에 접근하면 파일을 찾을 수 없다는 메시지가 나옵니다. 예를 들어 'Qiongtai Blog'라는 캡션이 붙은 사진이 있는 경우 URLENCODE 다음에 생성되는 파일명은 다음과 같습니다
그래서 브라우저로 이미지에 접속했더니 찾을 수 없다고 나오네요
자세히 살펴보니 브라우저에서 접속 시 자동으로 파일명을 중국어로 다시 변환해주는 것을 발견했습니다
파이어폭스
크롬
IE
사파리
IE와 사파리에서는 주소 표시줄이 한자로 변환된 것을 보지 못했지만, 파일을 찾을 수 없다고 보고하기도 했습니다. 그런데 요청하면 자동으로 변환이 되어야 할 것 같은데 주소창에 변환된 버전이 표시되지 않습니다. Nginx의 접속 기록에서 이미지에 접속 시 요청 상태를 확인하세요
요청 URL 처리에서는 예외가 발견되지 않았습니다. 마지막으로 인코딩된 파일 이름을 반복적으로 연구한 결과 모두 퍼센트 기호와 영숫자 문자로 구성되어 있다는 것을 발견했습니다. 다른 변환이 처리되었으므로 URLENCODE에 액세스한 후 파일을 찾을 수 없다는 메시지가 브라우저에 표시됩니다.
그래서 URLENCODE 뒤의 파일 이름에 있는 모든 퍼센트 기호를 밑줄로 바꿨습니다.
를
로 교체브라우저를 재사용하여 접속하면 문제가 해결됩니다
이미지의 텍스트 설명을 얻으려면 파일 이름의 "_"를 "%"로 바꾼 다음 URLDECODE를 사용하세요.
마지막으로 Linux의 파일 이름에는 Win 시스템과 마찬가지로 길이 제한이 있습니다. 현재 가장 일반적으로 사용되는 형식은 ext3이며 이 형식에서는 약 5자를 빼고 255자를 허용합니다. 확장자로는 순수 파일명이 250개 정도 남았고, URLENCODE 뒤의 한자 길이는 9이므로 최대 27자의 한자를 파일명으로 인코딩할 수 있다.
이 방법은 더 적은 수의 한자를 저장하지만 일부 암호화 방법을 사용하여 더 짧은 암호문을 얻은 다음 이 암호문을 URLENCODE할 수 있습니다. 생각해 보세요.