English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP에서 DOMDocument로 xml 저장할 때 중국어가 일그러지는 문제 해결 방법

PHP에서 DOMDocument가 xml 작업에 대해 영어로는 문제가 없지만, 중국어 폰트로는 맵시 문제가 있을 수 있습니다. 아래에서 이 문제에 대해 몇 가지 해결책을 소개해 드리겠습니다.

PHP의 DOM 내부는 utf8机制的, 在 loadHTML 时, 是通过检查字符中 meta 的 charset 来设置编码的, 如果没有 charset, 就当 iso8859进行处理了,而这种情况下进行saveXML时,输出来的却是utf8, 그래서 망가진 것을 보게 됩니다.

이렇게 설명하면 아직도 이해가 잘 안되신다면, 예를 들어보겠습니다:

$xml = new DOMDocument();
@$xml->loadHTML('<div>저는 테스트를 위해 봅니다</>div>'); 
$dom = new DOMXPath($xml);
echo $dom->query('//>div')->item(0)->saveXML();

웹 페이지를 열고 실행하면 출력이 망가진 것을 발견할 것입니다. 이 문제를 어떻게 해결할 수 있을까요? 두 가지 방법이 있습니다.

첫 번째 방법: loadHTML 때编码을 지정하면, 아래와 같은 코드는 php.net 공식 문서의 답변을 인용한 것입니다. 다음과 같이 코드를 작성합니다:

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);
foreach ($doc->childNodes as $item)
{
if ($item->nodeType == XML_PI_NODE)
{
$doc->removeChild($item); // >remove hack
}
}
$doc->encoding = 'UTF-8'; // insert proper

두 번째 방법: iconv를 통해 출력된 문자를 다시 변환하여, 다음과 같은 코드를 사용합니다:

echo iconv("UTF-8"", "GB18030//"TRANSLIT", $dom->saveXML($n) );

위에 설명한 것은 편집자가 여러분께 소개한 PHP에서 DOMDocument를 사용하여 XML을 저장할 때 중국어가 망가지는 문제의 해결책입니다. 여러분께 도움이 되길 바랍니다. 어떤 질문이 있으시면 댓글을 달고, 편집자가 즉시 답변을 드리겠습니다. 또한,呐喊 강의 웹사이트에 대한 여러분의 지지에 깊이 감사드립니다!

추천 합니다