>  기사  >  백엔드 개발  >  PHP 첨부 파일 download_php 기술의 왜곡된 중국어 이름에 대한 솔루션

PHP 첨부 파일 download_php 기술의 왜곡된 중국어 이름에 대한 솔루션

WBOY
WBOY원래의
2016-05-16 20:02:48998검색

이 기사의 예에서는 PHP 첨부 파일 다운로드의 왜곡된 중국어 이름에 대한 솔루션을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

PHP에서는 다운로드할 파일 이름이 중국어일 경우 파일 제목이 깨져서 나옵니다.

이때 고급 Urlencode를 의미하는 제목을 인코딩한 후 헤더에 넣어주시면 문제가 해결됩니다.

$filename = urlencode("下载文档");
header ( "Content-disposition: attachment; filename=$filename.xls" );

RFC2231의 정의에서는 다국어 인코딩의 Content-Disposition을 다음과 같이 정의해야 한다고 온라인에서는 나와 있습니다.

코드 복사 코드는 다음과 같습니다.
Content-Disposition: filename*="utf8''test. html"

즉,

파일 이름 뒤의 등호 앞에 *를 추가하세요
filename의 값은 작은따옴표로 묶인 세 개의 세그먼트(문자 집합(utf8), 언어(비어 있음) 및 urlencoded 파일 이름)로 나뉩니다.

그래서 이때 파일명을 url 인코딩으로 변환해야 하는데, php의 urlencode를 이용하면 쉽게 할 수 있습니다

$ua = _SERVER["HTTP_USER_AGENT"];
$filename = "中文 文件名.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
if (preg_match("/MSIE/", $ua)) {
  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
  header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
} else {
  header('Content-Disposition: attachment; filename="' . $filename . '"');
}

이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.