programing

PHP7에서 파일 이름이 포함된 UTF8 문자를 검사하는 가장 좋은 방법은 무엇입니까?

cafebook 2023. 9. 5. 20:47
반응형

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

반응형