English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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을 저장할 때 중국어가 망가지는 문제의 해결책입니다. 여러분께 도움이 되길 바랍니다. 어떤 질문이 있으시면 댓글을 달고, 편집자가 즉시 답변을 드리겠습니다. 또한,呐喊 강의 웹사이트에 대한 여러분의 지지에 깊이 감사드립니다!