>백엔드 개발 >PHP 문제 >PHP 페이지에 HTML 문자가 왜곡되어 나타나는 이유는 무엇입니까?

PHP 페이지에 HTML 문자가 왜곡되어 나타나는 이유는 무엇입니까?

Guanhui
Guanhui원래의
2020-05-14 15:18:403358검색

PHP 페이지에 HTML 문자가 왜곡되어 나타나는 이유는 무엇입니까?

왜 PHP 페이지에서 HTML이 깨졌나요?

1. PHP 웹 페이지 인코딩 오류

gb2312 인코딩을 사용하려면 php에서 header("Content-Type")을 출력해야 합니다. : text/html; charset =gb2312"), 정적 페이지 추가, 모든 파일의 인코딩 형식은 ANSI입니다. 메모장으로 열고 다른 이름으로 저장한 다음 인코딩을 ANSI로 선택하고 소스 파일을 덮어쓸 수 있습니다.

utf-8 인코딩을 사용하려면 PHP는 헤더("Content-Type: text/html; charset=utf-8")를 출력하고 정적 페이지를 추가하며 모든 파일의 인코딩 형식을 지정해야 합니다. utf-8입니다. utf-8로 저장하는 것은 약간 번거로울 수 있습니다. 일반적으로 utf-8 파일은 처음에 BOM을 가지고 있습니다. 세션을 사용하면 문제가 발생합니다. editplus에서 도구-> 매개변수 선택->파일->UTF-8 서명에서 항상 삭제를 선택한 다음 저장하여 BOM 정보를 제거합니다.

php 자체는 유니코드가 아니므로 substr과 같은 모든 기능을 mb_substr로 변경하거나(mbstring 확장 프로그램을 설치해야 함) iconv를 사용하여 코드를 변환해야 합니다.

2. MySQL 인코딩이 PHP 인코딩과 일치하지 않습니다.

해결 방법:

mysql 구성 파일 my.ini 또는 my.cnf를 수정하는 것이 가장 좋습니다. =utf8 [mysqld ] default-character-set=utf8 default-storage-engine=MyISAM [mysqld] 아래에 추가: default-collation=utf8_bin init_connect='SET NAMES utf8'

Add mysql_query("필요한 PHP 프로그램 앞에 설정 데이터베이스 작업을 수행하기 위한 이름 '인코딩'"); 인코딩은 PHP 인코딩과 일치합니다. PHP 인코딩이 gb2312이면 mysql 인코딩은 gb2312입니다. utf-8이면 mysql 인코딩은 utf8입니다. 데이터를 삽입하거나 검색할 때 문자가 깨져서는 안 됩니다

3. PHP와 운영 체제의 코딩이 일치하지 않습니다.

Windows 환경에서는 PHP 함수 호출 시 매개변수를 utf-8로 인코딩하면 move_uploaded_file(), filesize(), readfile(), 등, 이러한 기능은 업로드 및 다운로드를 처리할 때 자주 사용됩니다. 호출 시 다음 오류가 발생할 수 있습니다.

Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...
Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...
Warning: filesize() [function.filesize]: stat failed for ... in ...
Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..

Linux 환경에서 gb2312 인코딩을 사용하면 이러한 오류가 발생하지 않지만 저장된 파일 이름이 깨져서 확인할 수 없습니다. 파일을 읽으려면 먼저 매개 변수를 운영 체제에서 인식하는 인코딩으로 변환하면 mb_convert_encoding(문자열, 새 인코딩, 원래 인코딩) 또는 iconv(원래 인코딩, 새 인코딩, 문자열)를 사용할 수 있습니다. , 처리 후 저장하시면 파일명이 깨지지 않고 정상적으로 파일을 읽을 수 있어 중국어 이름의 파일 업로드 및 다운로드가 가능합니다.

실제로 시스템과 완전히 분리되어 시스템 인코딩을 고려할 필요가 없는 더 나은 솔루션이 있습니다. 파일 이름은 문자와 숫자로만 구성하여 데이터베이스에 원래 이름을 저장할 수 있습니다. 이렇게 하면 move_uploaded_file()을 호출할 때 문제가 발생하지 않습니다. 파일 이름을 중국어 이름으로 원래 이름으로 변경합니다. 다운로드를 구현하는 코드는 다음과 같습니다

header("Pragma: public");
header("Expires: 0");
header("Cache-Component: must-revalidate, post-check=0, pre-check=0");
header("Content-type: $file_type");
header("Content-Length: $file_size");
       header("Content-Disposition: attachment; filename=\"$file_name\"");
header("Content-Transfer-Encoding: binary");
readfile($file_path);

$file_type은 파일 형식, $file_name은 원래 이름, $file_path는 서비스에 저장된 파일의 주소입니다.
추천 튜토리얼: "PHP 튜토리얼"

위 내용은 PHP 페이지에 HTML 문자가 왜곡되어 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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