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 }
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 }
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!