Rumah > pembangunan bahagian belakang > Golang > Golang html.Menghuraikan menulis semula rentetan pertanyaan href untuk mengandungi &

Golang html.Menghuraikan menulis semula rentetan pertanyaan href untuk mengandungi &

王林
Lepaskan: 2024-02-09 23:42:08
ke hadapan
1220 orang telah melayarinya

Golang html.Parse重写href查询字符串以包含&

Editor PHP Zimo di sini untuk memperkenalkan anda kepada sedikit helah tentang Golang. Apabila menghuraikan HTML menggunakan html.Parse, kadangkala kita perlu menulis semula rentetan pertanyaan href untuk memasukkan simbol &. Teknik ini boleh membantu kami menjadi lebih fleksibel dan mudah semasa memproses pautan HTML, dan meningkatkan kecekapan pembangunan. Seterusnya, kami akan menerangkan secara terperinci cara menggunakan teknik ini dan memberikan kod sampel, dengan harapan ia akan membantu semua orang.

Kandungan soalan

Saya mempunyai kod berikut:

package main

import (
    "os"
    "strings"

    "golang.org/x/net/html"
)

func main() {
    myhtmldocument := `<!doctype html>
<html>
<head>
</head>
<body>
    <a href="http://www.example.com/input?foo=bar&baz=quux">wtf</a>
</body>
</html>`

    doc, _ := html.parse(strings.newreader(myhtmldocument))
    html.render(os.stdout, doc)
}
Salin selepas log masuk
Fungsi

html.render menghasilkan output berikut:

<!DOCTYPE html><html><head>

</head>
<body>
    <a href="http://www.example.com/input?foo=bar&baz=quux">WTF</a>

</body></html>
Salin selepas log masuk

Mengapa menulis semula rentetan pertanyaan dan meletakkan & 转换为 & (antara bar dan baz)?

Adakah cara untuk mengelakkan tingkah laku ini?

Saya cuba melakukan penukaran templat tetapi saya tidak mahu ia memecahkan url saya.

Penyelesaian

html.parse 想要生成有效的 html,并且 html 规范规定 href Ampersan dalam atribut mesti dikodkan.

https://www.w3.org/tr/xhtml1/guidelines .html#c_12

Dalam sgml dan xml, aksara ampersand ("&") mengisytiharkan permulaan rujukan entiti (contohnya, ® mewakili simbol tanda dagangan berdaftar "®"). Malangnya, ramai ejen pengguna html secara senyap mengabaikan penggunaan simbol & yang salah dalam dokumen html - menganggap simbol & yang tidak kelihatan seperti rujukan entiti sebagai simbol & literal. Ejen pengguna berasaskan XML tidak akan bertolak ansur dengan penggunaan yang salah ini, dan sebarang dokumen yang menggunakan simbol & secara salah tidak akan "sah" dan oleh itu tidak akan mematuhi spesifikasi ini. Untuk memastikan bahawa dokumen itu serasi dengan ejen pengguna html sejarah dan ejen pengguna berasaskan xml, simbol & yang digunakan dalam dokumen, yang dianggap sebagai aksara literal, mesti mewakili dirinya sebagai rujukan entiti (seperti "&"). Sebagai contoh, apabila atribut href sesuatu elemen merujuk kepada skrip cgi dengan parameter, ia mesti dinyatakan sebagai http://my.site.dom/cgi-bin/myscript.pl?class=guest& name=user 而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user.

Dalam kes ini, go sebenarnya menjadikan html anda lebih baik dan lebih cekap

Seperti yang dikatakan - penyemak imbas akan melepaskannya, jadi jika anda mengkliknya, url yang terhasil akan tetap betul (tanpa &,只有 &:

console.log(document.queryselector('a').href)
Salin selepas log masuk
 <a href="http://www.example.com/input?foo=bar&baz=quux">WTF</a>
Salin selepas log masuk

Atas ialah kandungan terperinci Golang html.Menghuraikan menulis semula rentetan pertanyaan href untuk mengandungi &. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan