XML에서 앰퍼샌드를 이스케이프 처리하여 HTML에서 엔티티로 렌더링하려면 어떻게해야합니까?


523

HTML 페이지에서 렌더링하려는 XML 텍스트가 있습니다. 이 텍스트에는 앰퍼샌드가 포함되어 있으며 엔티티 표현으로 렌더링하려고합니다 &.

소스 XML에서이 앰퍼샌드를 어떻게 피할 수 있습니까? 나는 시도 &했지만 이것은 실제 앰퍼샌드 문자 ( &) 로 디코딩 되어 HTML 에서는 유효하지 않습니다 .

따라서 &XML 출력을 사용하는 웹 페이지에서와 같이 렌더링되는 방식으로 이스케이프 처리하고 싶습니다 .


1
이 질문의 최신 개정에서 "실제 앰퍼샌드 문자 (&) ...는 HTML에서 유효하지 않습니다." 거짓입니다. 실제로, 정당화로 제공된 링크 된 질문에 대한 허용 된 답변조차도 "HTML5를 사용하면 이스케이프되지 않은 채로 둘 수 있지만 다음 데이터가 유효한 문자 참조처럼 보이지 않을 때만 가능합니다"라고 말합니다 .
Mark Amery 21시

답변:


422

XML에 내용 &이 포함되면 텍스트가 &됩니다.

HTML에서 사용하면로 렌더링됩니다 &.


195

은 XML 1.0 사양의 §2.4 , 당신은 사용할 수 있어야합니다 &.

나는 & amp; 그러나 이것은 허용되지 않습니다.

다른 문제가 아닙니까? XML은이를 앰퍼샌드를 피하는 방법으로 명시 적으로 정의합니다.


3
이것은 게시 될 때 완벽하게 합리적 이었으나, 질문에 대한 변경 (또는 설명)이 답이 아닌 것처럼 보이기 때문에 질문에 변경되었습니다. 우선, 인용 된 구절이 더 이상 질문에 존재하지 않습니다.
Mark Amery

132

&솔루션은 IT와 상당 유니 코드 소수점 연결하는, 그래서 문자 자체 XML에서 이스케이프 문자 &, 따라서 오류를 구문 분석에는 XML이 없음을 보장합니다. 즉, 문자를로 &바꿉니다 &.


5
나는이 솔루션을 정말로 선호한다! 16 진수 표기법을 사용할 수도 있어야합니다.&
CodeManX

2
논리적으로 왜 이것이 효과가 있을까요? 두 문자열 모두 끝에 문자 코드가있는 문자열을 포함하여 앰퍼샌드가 있습니다.
sijpkes

4
@sijpkes 여기에서 앰퍼샌드는 파서에게 다음 문자가 다른 문자를 나타내는 데 사용되며이 경우에는 앰퍼샌드임을 나타냅니다. 앰퍼샌드는 XML에서 "불법"이 아니며 특별한 의미를 갖습니다. "세미콜론에 도달 할 때까지이 문자 다음에 나오는 모든 문자는 다른 것으로 변환되어야합니다"를 의미합니다. 설명 문자와 후미 세미콜론없이 앰퍼샌드가 있으면 파서가 혼동됩니다.
라일리 메이저

1
이것이 저에게 답입니다. 추가 & # 038; 내 응답 헤더의 위치에서 수정되어 응답 헤더에 앰퍼샌드가 표시되지 않습니다. : D
iamjoshua

스택 오버플로가 너무 좋습니다. 내 문제를 해결하는 거의 11 세의 게시물이 있습니다. 그리고 690,000 번 이상 조회되었습니다.

69

CDATA태그 사용 :

 <![CDATA[
   This is some text with ampersands & other funny characters. >>
 ]]>

4
이것은 답이 아닌 추측입니다.
Bryan Oakley

10
추측일지도 모른다. 그래도 맞습니다. CDATA 마커를 사용하면 원시 앰퍼샌드를 사용할 수 있습니다.
Quentin

19
원래 게시물은 &가 사용될 위치를 명확하게 밝히지 않았으며 CDATA 태그는 속성 값으로 사용할 수 없으며 태그의 실제 내용에만 사용할 수 있으므로 '?'가 포함 된 이유는 무엇입니까?
scragar

1
이것은 xml 데이터의 특성화에 유용하며이 답변은 xml 렌더링과 관련된 다른 많은 시나리오에서 유용합니다. 나를 위해 Camel XML DSL에서 실제로 도움이되었습니다. 본문이나 일부 헤더를 일부 XML 데이터로 설정해야 할 때 Camel XML 파서는 CDATA 내용을 무시하고 문자 스트림으로 읽습니다. 이없이 낙타 엔진은 잘못된 XML 구조 예외를 throw
키무

1
필자의 경우 XML에 어떤 문자가 올지 확실하지 않으므로 해당 섹션의 모든 항목을 이스케이프 처리해야하기 때문에 이것이 정확히 필요한 답입니다.
Matt


11

내 경우에는로 변경해야했습니다 %26.

&URL에서 탈출해야했습니다 . 그래서 &amp;나를 위해 운동하지 않았다. 를 urlencode의 기능 변경 &%26. 이런 식으로 XML이나 브라우저 URL 메커니즘이 URL에 대해 불평하지 않았습니다.


8
예. OP는 XML에서 탈출하는 것에 관한 것입니다. URL에서 이스케이프 처리하는 것은 다른 문제입니다. XML에 URL이 있거나 URL에 XML 조각이 있으면 재미가 시작됩니다.
Oskar Berggren

6

나는 시도했지만 작동하지 않았다. Wim ten Brink의 답변에 따라 & amp; amp를 시도해 보았습니다.

동료 개발자 중 한 명이 & # x26; 렌더링 횟수에 관계없이 작동했습니다.


5

&amp; XML 문서의 대부분의 섹션에서 앰퍼샌드를 나타내는 방법입니다.

당신은 XML은 HTML에 표시하도록하려면 먼저 제대로 인코딩 된 XML을 생성 (변경 포함하는 필요 &&amp;) 및 다음 (다시 변경 포함 적절하게 인코딩 된 HTML 만들기 위해 그것을 사용 &하는 방법에 대해 &amp;). 결과는 다음과 같습니다.

&amp;amp;

XML 인코딩에 대한 자세한 설명은 다음을 참조하십시오.

XML 문서에서 어떤 문자를 이스케이프해야합니까?



3

유니 코드를 사용하는 것은 \u0026어떻습니까? 내 안드로이드 XML 파일에서 작동합니다. 문제가 발생하면 누군가 알려주세요.


1
\u이스케이프는 일반적으로 XML에서 특별한 의미가 없습니다. -1.
Mark Amery

@MarkAmery 예, 특별한 의미가 없기 때문에 정확하게 작동하는 이유는 무엇입니까? 해석 할 것이 없기 때문에 잘못 될 것이 없습니다. Java는 유니 코드를 해석하고 OP가 원하는대로 앰퍼샌드를 표시합니다.
Scott Biggs

1
@ScottBiggs OP의 질문과 Java는 무엇입니까?
Philippe-André Lorin 12

1
@ScottBiggs 주제가 맞지 않습니다. − 1.
Philippe-André Lorin

1
@ScottBiggs 그것이 당신을 위해 작동하고 다른 사람들이 혜택을 볼 수 있다는 사실은 관련이 없습니다. 당신의 대답은 다른 모든 독자들에게 소음입니다. OP가 요구 한 일반적인 사례를 다루지 않기 때문입니다. 이것은 당신의 성공을 공유하지 않는 것이 아닙니다. 이것은 그것이 속한 곳에 보관하는 것입니다. 귀하의 기여는 유용 할 수 있지만 여기서 답변으로 제시되지는 않습니다. 어쩌면 의견이나 다른 질문에 대한 답변 일 수도 있습니다 (자신이 자유롭게 작성하고 답변 할 수 있음).
Philippe-André Lorin 10

0

XML이 아래와 같은지 고려하십시오.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

<>오류가 발생 하여 직접 사용할 수 없습니다 . 이 경우, &#60;&#62;대신 사용할 수 있습니다 .

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

모든 코드를 보려면 여기클릭하십시오 .


2
이 답변이 게시되기 전 7 년 동안이 근거가 잘 파악 된 것 같습니다.
miken32
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.