PHP7에서 파일 이름이 포함된 UTF8 문자를 검사하는 가장 좋은 방법은 무엇입니까?
우리는 사용자가 이미지 파일을 업로드하는 사이트를 운영합니다.이러한 파일이 Mac에서 생성되면 파일 이름에 UTF-8 문자가 포함될 수 있습니다(Mac에서는 UTF-8을 파일 시스템 문자 집합으로 사용하므로).
PHP7 코드가 이 파일들을 수신할 때, 우리는 그것들을 데비안 리눅스인 로컬 파일 시스템에 저장해야 하며 UTF-8을 지원하지 않습니다.
또한 PHP7은 UTF-8을 지원할 수 있지만, 기본적으로 또는 자동으로 지원하지 않습니다.
문제는 이 문제를 해결하기 위한 현재의 모범 사례가 무엇인가 하는 것입니다.
생각 1:
데이터베이스에 원래 이름 저장(Collation =utf8mb4_unicode_ci
)를 선택한 다음 UUID를 사용하여 이미지를 Disk에 저장합니다.다음을 사용합니다.download=""
파일을 원래 파일 이름으로 다운로드합니다.
찬성: 문제가 해결되는 것 같습니다.
반대: PHP에서는 멀티바이트 지원이 덜컹거리고 덜컹거리는 것 같습니다(7.2.x+에서도 마찬가지입니다).이것을 처리하기 위해 많은 수표가 필요합니까?
생각 2:
UTF-8 문자를 파일 이름에서 삭제/필터링하여 문제를 완전히 방지합니다.
Pro: MySQL/MariaDB에서 항상 사용하는 것처럼 라틴어 조합을 사용할 수 있으며 파일 시스템 문자 집합에 대해 걱정할 필요가 없습니다.
반대: 이것은 손실입니다.이름이 지정된 파일touche'.pdf
이름이 변경됩니다.touch.pdf
또는 회전할 동등성 표를 만들어야 합니다.e'
안으로e
.
생각 3
저는 이 문제를 너무 많이 생각했거나 간단한 해결책을 놓치고 있습니다.
UTF-8 / 멀티바이트인 업로드된 파일 이름을 처리하는 가장 좋은 방법은 무엇입니까?
PHP를 고려해 보십시오.urlencode()
UTF-8 문자를 %+16진수로 변환합니다.
fn 'smiley-☺'
urlencode 'smiley-%E2%98%BA'
bin2hex '736d696c65792de298ba'
그냥 신청하는 게 더 나을 것 같아요.urlencode
모든 항목 - 일반 ASCII 이름은 변경되지 않습니다.그리고 나는 생각하지 않습니다.%
문제를 일으킬 것입니다.다른 구두점은 문제를 일으킬 수 있습니다(예:/
).
언급URL : https://stackoverflow.com/questions/51900763/in-php7-whats-the-best-way-to-sanitize-utf8-character-containing-filenames
'programing' 카테고리의 다른 글
node.js에서 C++ 라이브러리를 사용하려면 어떻게 해야 합니까? (0) | 2023.09.05 |
---|---|
사용자 정의된 막대 단추 항목과 함께 "일반 스타일이 탐색 항목에서 지원되지 않음" 경고 (0) | 2023.09.05 |
Cakephp 2.4.6을 사용하여 MYSQL에서 MariaDB로 마이그레이션 (0) | 2023.09.05 |
CSS 콘텐츠 속성: 텍스트 대신 HTML을 삽입할 수 있습니까? (0) | 2023.09.05 |
크롬이 CORS OPTION 요청을 취소하는 이유 (0) | 2023.09.05 |