programing

엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.

nasanasas 2020. 10. 20. 07:43
반응형

엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.


* .xhtml 페이지에 packman 게임을 넣고 싶습니다. (jsf 2와 primefaces 3.5를 사용하고 있습니다)

하나,

xhtml에서 html 페이지를 "번역"하면이 스크립트에서 오류가 발생합니다.

    <script>

    var el = document.getElementById("pacman");

    if (Modernizr.canvas && Modernizr.localstorage && 
        Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) {
      window.setTimeout(function () { PACMAN.init(el, "./"); }, 0);
    } else { 
      el.innerHTML = "Sorry, needs a decent browser<br /><small>" + 
        "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>";
    }
  </script>

줄에서 :

if (Modernizr.canvas && Modernizr.localstorage && 

나는 얻다:

엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.

그것을 고치는 방법을 아십니까?


지금까지 게시 된 모든 답변이 올바른 해결책을 제시하고 있지만 구체적인 문제의 근본 원인을 제대로 설명 할 수있는 답변은 없었습니다.

Facelets는 XHTML + XML을 사용하여 HTML 출력을 생성하는 XML 기반보기 기술입니다. XML에는 XML 파서에 의해 특수 처리되는 5 개의 특수 문자가 있습니다.

  • < 태그의 시작.
  • > 태그의 끝.
  • " 속성 값의 시작과 끝.
  • ' 속성 값의 대체 시작 및 끝.
  • &엔티티의 시작 (로 끝나는 ;).

경우의 &하는 따르지 #(예를 들면 &#160;, &#xA0;등), XML 파서는 암시 적으로 다섯 가지 중 하나를 찾고 미리 정의 된 개체 이름 lt , gt, amp, quotapos, 또는 수동으로 정의 된 엔티티 이름 . 그러나 특정 경우 &에는 XML 엔티티가 아닌 JavaScript 연산자 로 사용 했습니다. 이것은 XML 구문 분석 오류를 완전히 설명합니다.

엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.

본질적으로, JS 파일 대신 XML 문서 인 잘못된 위치에 JavaScript 코드를 작성하고 있으므로 이에 따라 모든 XML 특수 문자를 이스케이프해야합니다. &로 이스케이프해야합니다 &amp;.

따라서 귀하의 특정 경우에는

if (Modernizr.canvas && Modernizr.localstorage && 

되어야한다

if (Modernizr.canvas &amp;&amp; Modernizr.localstorage &amp;&amp;

XML 유효하게 만드십시오.

그러나 이로 인해 JavaScript 코드를 읽고 유지하기가 더 어려워집니다. Mozilla Developer Network의 뛰어난 문서 Writing JavaScript for XHTML 에서 언급했듯이 JavaScript 코드를 문자 데이터 (CDATA) 블록에 배치해야합니다. 따라서 JSF 용어로는 다음과 같습니다.

<h:outputScript>
    <![CDATA[
        // ...
    ]]>
</h:outputScript>

XML 파서는 블록의 내용을 XML이 아닌 "일반 바닐라"문자 데이터로 해석하므로 XML 특수 문자를 "있는 그대로"해석합니다.

그러나 훨씬 더 나은 방법은 JS 코드를 자체 JS 파일에 넣는 <script src><h:outputScript>입니다.

<h:outputScript name="onload.js" target="body" />

(음 target="body",이 방법 JSF가 자동으로 렌더링됩니다 <script>의 맨 마지막 <body>에 관계없이 어디 <h:outputScript>자체가 본인과 같은 효과를 달성, 위치 window.onload등을 $(document).ready(), 당신은 그 스크립트에서 더 이상 사람들을 사용할 필요가 없습니다)

이렇게하면 JS 코드에서 XML 특수 문자에 대해 걱정할 필요가 없습니다. 추가 보너스로 브라우저가 JS 파일을 캐시하여 총 응답 크기를 줄일 수 있습니다.

또한보십시오:


You need to add a CDATA tag inside of the script tag, unless you want to manually go through and escape all XHTML characters (e.g. & would need to become &amp;). For example:

<script>
//<![CDATA[
var el = document.getElementById("pacman");

if (Modernizr.canvas && Modernizr.localstorage && 
    Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) {
  window.setTimeout(function () { PACMAN.init(el, "./"); }, 0);
} else { 
  el.innerHTML = "Sorry, needs a decent browser<br /><small>" + 
    "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>";
}
//]]>
</script>

The parser is expecting some HTML content, so it sees & as the beginning of an entity, like &egrave;.

Use this workaround:

<script type="text/javascript">
// <![CDATA[
Javascript code here
// ]]>
</script>

so you specify that the code is not HTML text but just data to be used as is.


Do

<script>//<![CDATA[
    /* script */
//]]></script>

If you use XHTML, for some reason, note that XHTML 1.0 C 4 says: “Use external scripts if your script uses < or & or ]]> or --.” That is, don’t embed script code inside a script element but put it into a separate JavaScript file and refer to it with <script src="foo.js"></script>.

참고URL : https://stackoverflow.com/questions/16303779/the-entity-name-must-immediately-follow-the-in-the-entity-reference

반응형