次のコード スニペットを考えてみましょう:
パッケージメイン</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 サイトの他の関連記事を参照してください。