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

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

DDD
リリース: 2024-12-01 13:09:11
オリジナル
1043 人が閲覧しました

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

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

問題のシナリオ

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

パッケージメイン</p>
<p>インポート(</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">...

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

...
ログイン後にコピー

}

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

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

ソース:php.cn
前の記事:私のブラウザは、React アプリの My Go サーバーによって設定された Cookie を保存しないのはなぜですか? 次の記事:TCP プロキシで完全なデータ送信を保証するにはどうすればよいですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート