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

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

王林
王林ke hadapan
2024-02-09 23:42:081161semak imbas

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

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)
 <a href="http://www.example.com/input?foo=bar&baz=quux">WTF</a>

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam