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
Linda Hamiltonasal
2024-12-11 14:01:10943semak imbas

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
}

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!

Kenyataan:
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