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.
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&amp;amp;amp;baz=quux">wtf</a> </body> </html>` doc, _ := html.parse(strings.newreader(myhtmldocument)) html.render(os.stdout, doc) }
html.render menghasilkan output berikut:
<!DOCTYPE html><html><head> </head> <body> <a href="http://www.example.com/input?foo=bar&amp;amp;amp;amp;baz=quux">WTF</a> </body></html>
Mengapa menulis semula rentetan pertanyaan dan meletakkan &amp;amp;amp;
转换为 &amp;amp;amp;
(antara bar dan baz)?
Adakah cara untuk mengelakkan tingkah laku ini?
Saya cuba melakukan penukaran templat tetapi saya tidak mahu ia memecahkan url saya.
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&amp;amp;amp; name=user
而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;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 &amp;amp;amp;
,只有 &
:
console.log(document.queryselector('a').href)
<a href="http://www.example.com/input?foo=bar&amp;amp;amp;amp;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!