> 백엔드 개발 > PHP 튜토리얼 > 내 PHP DOMDocument loadHTML 함수가 UTF-8 인코딩을 올바르게 처리하지 못하는 이유는 무엇입니까?

내 PHP DOMDocument loadHTML 함수가 UTF-8 인코딩을 올바르게 처리하지 못하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-11 19:59:15
원래의
971명이 탐색했습니다.

Why is my PHP DOMDocument loadHTML function not handling UTF-8 encoding correctly?

PHP DOMDocument loadHTML이 UTF-8을 올바르게 인코딩하지 않음

문제

DOMDocument를 사용하여 HTML을 구문 분석하고 있지만 인코딩이 손실된 것 같습니다. HTML을 로드할 때. HTML의 일본어 문자는 잘못된 텍스트로 대체되지만, echo를 통해 HTML 문자열을 직접 출력할 때는 올바르게 표시됩니다.

원인

DOMDocument에서는 입력 문자열이 ISO-8859-1에 있다고 가정합니다. (HTTP/1.1 기본 문자 집합)이 기본적으로 사용됩니다. UTF-8 문자열을 구문 분석할 때 이 잘못된 가정으로 인해 잘못된 해석이 발생하여 문자가 깨질 수 있습니다.

해결책

DOMDocument가 HTML 문자열을 올바른 인코딩으로 로드하도록 하려면 다음과 같은 몇 가지 옵션이 있습니다.

  1. XML 인코딩 선언 또는 메타 문자 집합 앞에 추가 선언: HTML 문자열을 로드하기 전에 또는 . 이렇게 하면 문자열이 UTF-8로 처리됩니다.
  2. SmartDOMDocument 사용: 이 외부 라이브러리는 올바른 인코딩을 자동으로 감지하고 처리하는 loadHTMLCharset 함수를 제공합니다.
  3. 문자열을 HTML 엔터티로 변환: PHP의 mb_convert_encoding 함수는 HTML 문자열을 다음으로 변환할 수 있습니다. UTF-8 인코딩을 사용하는 HTML 엔터티. 이 변환된 문자열을 DOMDocument에 로드합니다.
  4. mb_encode_numericentity 사용: 이 함수는 숫자 엔터티로 상위 ASCII 바이트를 인코딩하여 ISO-8859-1 제한 사항( PHP 8.2 만).

다음은 메타 문자 집합 선언을 사용하는 예입니다.

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();

// Add meta charset declaration
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($contentType . $profile);

echo $dom->saveHTML();
로그인 후 복사

이렇게 하면 올바른 UTF-8 인코딩으로 HTML 문자열이 로드됩니다. , 원래 일본어 문자를 보존합니다.

위 내용은 내 PHP DOMDocument loadHTML 함수가 UTF-8 인코딩을 올바르게 처리하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿