Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memintas Aksara HTML Melarikan Diri dalam `json.Marshal` Go?

Bagaimana untuk Memintas Aksara HTML Melarikan Diri dalam `json.Marshal` Go?

Linda Hamilton
Lepaskan: 2024-12-11 14:01:10
asal
886 orang telah melayarinya

How to Bypass HTML Character Escaping in Go's `json.Marshal`?

Memintas Aksara HTML Melarikan Diri dalam json.Marshal

Fungsi json.Marshal Go secara automatik melepaskan aksara tertentu, termasuk < dan >, untuk mengelakkan salah tafsir oleh pelayar. Walau bagaimanapun, tingkah laku ini boleh menjadi tidak diingini apabila mensiri data XML kerana ia mengubah kandungan yang dimaksudkan.

Malangnya, tidak mungkin untuk melumpuhkan pelarian aksara menggunakan fungsi json.Marshal sahaja. Kod sumber mendedahkan bahawa watak melarikan diri dikodkan keras sebagai benar, memastikan bahawa < dan > sentiasa ditukar kepada "u003c" dan "u003e" masing-masing. Had ini meliputi pelaksanaan kaedah MarshalJSON tersuai, kerana mereka masih bergantung pada pelaksanaan json.Marshal dalaman.

Untuk mengatasi halangan ini, penyelesaian melibatkan penentuan fungsi tersuai untuk marshalling. Berikut ialah versi ubah suai jenis Track anda yang melaksanakan kaedah JSON:

import "bytes"
import "encoding/json"

type Track struct {
    XmlRequest string `json:"xmlRequest"`
}

func (t *Track) JSON() ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
Salin selepas log masuk

Dengan menggunakan kaedah JSON tersuai ini, anda boleh mengawal gelagat melarikan diri dengan menetapkan SetEscapeHTML(false) secara eksplisit.

Jika anda memerlukan penyelesaian generik untuk sebarang struct, anda boleh mentakrifkan fungsi berikut:

import "bytes"
import "encoding/json"

func JSONMarshal(t interface{}) ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memintas Aksara HTML Melarikan Diri dalam `json.Marshal` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan