왜 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!