ホームページ >バックエンド開発 >Golang >Go で HTML エスケープ シーケンスを効率的に変換する方法

Go で HTML エスケープ シーケンスを効率的に変換する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 15:22:16647ブラウズ

How to Efficiently Convert HTML Escape Sequences in Go?

HTML タグのエスケープ文字の変換

Go では、エスケープ文字を含む HTML タグの変換は、思ったほど簡単ではありません。 json.Marshal() は、「<」のような文字を含む文字列を簡単に変換できます。エスケープ シーケンス "u003chtmlu003e" に対して、json.Unmarshal() は逆の操作を行うための直接的かつ効率的な方法を提供しません。

strconv.Unquote() の使用

strconv.Unquote() 関数を使用して変換を実行できます。ただし、文字列を引用符で囲む必要があります。したがって、これらの囲み文字を手動で追加する必要があります。

import (
    "fmt"
    "strconv"
)

func main() {
    // Important to use backtick ` (raw string literal)
    // else the compiler will unquote it (interpreted string literal)!

    s := `\u003chtml\u003e`
    fmt.Println(s)
    s2, err := strconv.Unquote(`"` + s + `"`)
    if err != nil {
        panic(err)
    }
    fmt.Println(s2)
}

出力:

\u003chtml\u003e
<html></p>
<p><strong>注:</strong></p>
<p>HTML パッケージも使用できます。 HTML テキストのエスケープとアンエスケープ用。ただし、uxxxx 形式の Unicode シーケンスはデコードせず、decmal; のみをデコードします。または HH;.</p>
<pre class="brush:php;toolbar:false">import (
    "fmt"
    "html"
)

func main() {
    fmt.Println(html.UnescapeString(`\u003chtml\u003e`)) // wrong
    fmt.Println(html.UnescapeString(`&amp;#60;html&amp;#62;`))   // good
    fmt.Println(html.UnescapeString(`&amp;#x3c;html&amp;#x3e;`)) // good
}

出力:

\u003chtml\u003e
<html>
<html>

注 2:

文字列は二重引用符 ( ") は、コンパイラによって引用符で囲まれずに解釈された文字列です。引用符をそのまま使用した文字列を指定するには、次を使用します。バッククォートを使用して生の文字列リテラルを作成します。

s := "\u003chtml\u003e" // Interpreted string literal (unquoted by the compiler!)
fmt.Println(s)

s2 := `\u003chtml\u003e` // Raw string literal (no unquoting will take place)
fmt.Println(s2)

s3 := "\u003chtml\u003e" // Double quoted interpreted string literal
                           // (unquoted by the compiler to be "single" quoted)
fmt.Println(s3)

出力:

<html>
\u003chtml\u003e

以上がGo で HTML エスケープ シーケンスを効率的に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。