ホームページ >バックエンド開発 >Golang >Go の JSON マーシャラーによる「&\」から「&\」への変換を停止するにはどうすればよいですか?

Go の JSON マーシャラーによる「&\」から「&\」への変換を停止するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-01 13:09:11993ブラウズ

How to Stop Go's JSON Marshaler from Converting '&' to '&'?

JSON が「&」から「&」に変換されないようにするには?

問題のシナリオ

次のコード スニペットを考えてみましょう:

パッケージメイン</p>
<p>インポート(</p>
<pre class="brush:php;toolbar:false">"encoding/json"
"fmt"
"log"
"net/http"

)

func testFunc(w http.ResponseWriter, r *http.Request) {

data := make(map[string]string)
data["key"] = "&"
bytes, err := json.Marshal(data)
if err != nil {
    fmt.Fprintln(w, "generator json error")
} else {
    //print console
    fmt.Println(string(bytes))
    fmt.Println("&")
    //print broswer
    fmt.Fprintln(w, string(bytes))
    fmt.Fprintln(w, "&")
}

}

func main () {

http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
    log.Fatal("ListenAndServe", err)
}

}

このコードを実行すると、アンパサンド文字 ('&') が & に変換されることがわかります。

解決策

Go 1.7 では、この問題に対処するための新しいオプションが導入されました:

func (*Encoder) SetEscapeHTML

この関数を使用すると、「&」、「<」、「<」などの HTML エンティティのエスケープを無効にすることができます。 '>'.

サンプル コードでこのソリューションを実装するには、testFunc 関数を次のように変更します。

func testFunc(w http.ResponseWriter, r *http.リクエスト) {</p>
<pre class="brush:php;toolbar:false">...

enc := json.NewEncoder(w)
enc.SetEscapeHTML(false)

...

}

エンコーダーの HTML エスケープを無効にすることで、アンパサンド文字が JSON 出力内で「&」として保持されるようになります。ブラウザとコンソールの両方で。

以上がGo の JSON マーシャラーによる「&\」から「&\」への変換を停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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