DOMDocument에서 UTF-8 문자를 처리할 수 없음
웹 서버가 UTF-8 인코딩으로 응답을 전송하는 시나리오에서 모든 파일은 마찬가지로 UTF-8로 저장되었고 모든 관련 설정이 UTF-8 인코딩으로 구성되어 있으면 문제가 발생합니다. 출력 기능을 검증하기 위해 설계된 테스트 프로그램은 불규칙한 동작을 보여줍니다.
프로그램 실행 시 출력은 다음과 같이 렌더링됩니다.
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Test!</title></head><body> <h1>☆ Hello ☆ World ☆</h1> </body></html>
다음과 같이 표시됩니다.
< ;h1>â~† Hello â~† World â~†
프로그램:
<code class="php">$html = <<<HTML <!doctype html> <html> <head> <meta charset="utf-8"> <title>Test!</title> </head> <body> <h1>☆ Hello ☆ World ☆</h1> </body> </html> HTML; $dom = new DOMDocument("1.0", "utf-8"); $dom->loadHTML($html); header("Content-Type: text/html; charset=utf-8"); echo($dom->saveHTML());</code>
근본적인 원인은 DOMDocument::loadHTML()이 HTML 형식의 문자열을 예상하기 때문입니다. HTML은 본질적으로 ISO-8859-1(ISO 라틴 알파벳 No. 1)을 기본 문자 인코딩으로 활용합니다. 결과적으로 HTML 4.0용으로 설계된 HTML 파서가 이 인코딩을 초과하는 문자를 발견하면 예측할 수 없는 동작을 보일 수 있습니다.
비ASCII 문자를 엔터티로 변환
이 문제를 해결하려면 ASCII 범위(127/h7F)를 벗어난 모든 문자를 HTML 엔터티로 변환해야 합니다. 이 프로세스는 HTML-ENTITIES 대상 인코딩과 함께 mb_convert_encoding을 사용하여 달성할 수 있습니다:
<code class="php">$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");</code>
콘텐츠 유형 메타 태그 추가
또는 다음 방법으로 문제를 해결할 수 있습니다. 문자 세트를 UTF-8로 지정하여 문서 자체에 태그를 지정합니다.
<code class="html"><meta http-equiv="content-type" content="text/html; charset=utf-8"></code>
이 메서드는 DOMDocument에 대한 힌트 역할을 하여 입력을 UTF-8 인코딩으로 해석하도록 강제합니다.
섹션에서 HTML 2.0 사양에 따르면 이러한 요소는 헤더 내에서 자동으로 재배치됩니다.위 내용은 HTML을 로드할 때 DOMDocument가 UTF-8 문자를 올바르게 처리하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!