현재 사용자는 원하는대로 파일을 업로드 할 수 있습니다. 따라서 업로드 된 파일에는 공백 문자 (ß, ü
등등)가 있습니다. 다른 사용자는 URL에서 공백을 포함하여 이러한 파일을 다운로드 할 수 있습니다. 이 방법으로 작동하지만 RFC1738 - Uniform Resource Locators (URL)에 따라 [a-zA-Z0-9]
영숫자 문자와 일부 특수/예약 문자 만 사용할 수 있습니다. 빈 공간도 피해야합니다.사용자 업로드/다운로드 파일 이름에 허용되는 문자
현재 서버의 파일 이름에 ß
ß
이 표시됩니다. 파일을 다운로드하려는 사용자는 MySQL 데이터베이스 (utf8_unicode_ci)에서 표시된 올바른 문자 (ß)를 가져 오므로 서버에서 파일을 찾을 수 있습니다.
- 파일 이름을 처리하는 올바른 방법은 무엇입니까?
- 파일 이름을 확인하고 업로드를 허용해야합니까?
- 사용자 업로드 후 서버의 파일 이름을 변경해야합니까 (예 :
str_replace()
,urlencode()
, ...)?
"파일 시스템의 인코딩과 파일 시스템이 업로드 파일 이름에 사용하는 charset과 호환되는지"를 어떻게 알 수 있습니까? 예, UTF-8을 사용해야합니다. 웹 서버는 아파치이고, 데이터베이스 서버는 MySQL 5.0.77이고, 연결은'SET NAMES utf8'으로 설정되고, 브라우저는 누구나 될 수 있고, 업로드는'POST '와'multipart/form-data'를 통해 이루어지며, HTML의 인코딩은'UTF-8 '. Firebug에서 file-link-offering HTTP HTML 응답은'Content-Type \t application/x-www-form-urlencoded'을 가지고 있지만, 나는 무엇인가하지 않았다 (디폴트?). – testing
그래서'Content-Disposition'은 내가 원하는 것이 아닐 것이다. 파일 이름은 어떻게 정상화되고 유효성이 검사됩니까? – testing
@testing : 문자열 처리를 통해 직접 처리 할 수 있습니다. – hakre