>백엔드 개발 >XML/RSS 튜토리얼 >서버측 XSLT 중에 발생하는 인코딩 문제에 대한 솔루션

서버측 XSLT 중에 발생하는 인코딩 문제에 대한 솔루션

Y2J
Y2J원래의
2017-04-22 14:50:192032검색

최근 Apple Peel과 함께 Weather For Google Earth의 최적화를 논의할 때 XSLT를 사용하여 XML 데이터를 변환했습니다. 그런 다음 대략적인 프로세스는 XML 파일과 XSLT 파일을 모두로 전송하는 것입니다. DOM 엔진은 이를 우리가 원하는 HTML로 변환합니다(이 경우 KML 파일을 생성하려고 합니다). 이 변환 프로세스는 클라이언트측 변환과 서버측으로 구분됩니다. 클라이언트측 변환을 위해서는 사용자 브라우저가 XML을 완벽하게 지원해야 하지만 현재 모든 사용자 브라우저(IE5, IE4 등)가 XML을 지원하는 것은 아니기 때문입니다. -사이드 변환이 수행됩니다. 비교적 이상적입니다.
XML 파일 형식:

<?xml version="1.0" encoding="UTF-8"?> 
<weather ver="2.0"> 
  <head>[...] 
  </head> 
  <loc id="CHXX0101">[...]   
  </loc>   
  <cc>[...]   
  </cc>   
  <dayf>   
    <lsup>10/28/06 11:16 AM Local Time</lsup>   
    <day d="0" t="Saturday" dt="Oct 28">[...]   
    </day>   
    <day d="1" t="Sunday" dt="Oct 29">[...]   
    </day>   
  </dayf>  
</weather>


//========출력 유형 및 스트림 인코딩============ ================


rree
//=====원격 XML 파일 가져오기 및 로드========== ================

아아앙

//======XSL 파일 로드============= ============

아아앙

//======파일 변환================== ==
Response.Write(oXD.transformNode(xsl));

인코딩은 모든 곳에서 선언되므로 인코딩 문제가 없어야 합니다. 하지만 문제가 발생했습니다. 출력 KML 파일의 시작 구문은 항상


<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/">[...] 
</xsl:stylesheet>

입니다. 테스트를 통해 XML과 XSLT의 두 소스 파일에 문제가 없는 것으로 확인되었습니다. 나중에 RE: [ xsl] 중국어 문제(해결 방법) 이 기사에서는 대략적인 이유를 찾았습니다. 엔진은 변환 노드가 문자열을 생성하며, win32 플랫폼에서는 항상 UTF-16을 사용하여 문자열을 처리한다고 합니다. . 그런 다음 이 문자열을 사용하여 KML 파일을 생성하고 결과는 UTF-16만 가능합니다.
해결책은 변환NodeToObject 엔진을 사용하는 것입니다. 파일 변환 부분은 oXD.transformNodeToObject(xsl, Response)로 대체됩니다. 두 방법의 차이점은 전자는 문자열 변수를 생성하고 후자는 변환된 XML 데이터를 지정된 노드에 직접 저장한다는 점입니다.

위 내용은 서버측 XSLT 중에 발생하는 인코딩 문제에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.