렌더링된 페이지에서 My Go HTML 주석이 사라지는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-02 05:09:03
원래의
765명이 탐색했습니다.

Why Are My Go HTML Comments Disappearing in Rendered Pages?

Go HTML 주석이 렌더링되지 않음: template.HTML을 사용한 솔루션

Go 웹 애플리케이션에서 렌더링된 페이지에서 HTML 주석이 사라짐 실망스러운 문제가 될 수 있습니다. 이는 컨테이너 없는 제어 흐름 구문에 의존하는 KnockoutJS 코드에서 특히 문제가 됩니다.

이 동작의 이유는 기본적으로 Go의 html/템플릿 패키지가 보안상의 이유로 HTML 콘텐츠를 이스케이프하기 때문입니다. 이는 로 묶인 HTML 주석이 주석으로 표시되는 대신 이스케이프된 텍스트로 렌더링된다는 의미입니다.

이 문제를 해결하기 위해 html/template 패키지는 특수 유형을 제공합니다. template.HTML이라고 합니다. 이 유형의 값은 렌더링될 때 이스케이프되지 않습니다.

사용자 정의 함수 접근 방식

한 가지 효과적인 솔루션은 템플릿에 HTML 주석을 래핑하는 템플릿용 사용자 정의 함수를 만드는 것입니다. .HTML. 이를 수행하는 방법은 다음과 같습니다.

<code class="go">func main() {
    t := template.Must(template.New("").Funcs(template.FuncMap{
        "safe": func(s string) template.HTML { return template.HTML(s) },
    }).Parse(src))
    t.Execute(os.Stdout, nil)
}

const src = `<html><body>
{{safe "<!-- This is a comment -->"}}
<div>Some <b>HTML</b> content</div>
</body></html>`</code>
로그인 후 복사

이 예에서는 문자열 인수를 가져와 이를 template.HTML로 반환하는 safe() 함수를 정의합니다. 템플릿 내에서 {{safe ""}}를 사용하여 HTML 주석을 이 함수에 전달할 수 있습니다. 이렇게 하면 주석이 이스케이프되지 않습니다.

사용법

이 기술을 사용하려면 HTML 주석을 다음 형식으로 변환하면 됩니다.

<code class="html">{{safe "<!-- Your comment -->"}}</code>
로그인 후 복사

또는

<code class="html">{{"<!-- Your comment -->" | safe}}</code>
로그인 후 복사

이 접근 방식을 사용하면 HTML 주석이 렌더링된 출력에 유지됩니다.

참고:

  • HTML 주석에 따옴표가 포함된 경우 적절하게 이스케이프 처리해야 합니다(예: {{safe ""}}).
  • 조건부 HTML 사용을 피하세요. 상황에 맞는 이스케이프 메커니즘을 방해할 수 있으므로 주석을 사용하세요.

위 내용은 렌더링된 페이지에서 My Go HTML 주석이 사라지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!