Heim >Backend-Entwicklung >Golang >Golang html.Parse schreibt die href-Abfragezeichenfolge so um, dass sie & enthält
PHP-Redakteur Zimo ist hier, um Ihnen einen kleinen Trick über Golang vorzustellen. Beim Parsen von HTML mit html.Parse müssen wir manchmal die Abfragezeichenfolge von href umschreiben, um das &-Symbol einzuschließen. Diese Technik kann uns helfen, bei der Verarbeitung von HTML-Links flexibler und komfortabler zu sein und die Entwicklungseffizienz zu verbessern. Als nächstes erklären wir im Detail, wie diese Technik verwendet wird, und geben Beispielcode, in der Hoffnung, dass er für alle hilfreich ist.
Ich habe den folgenden Code:
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) }Die Funktion
html.render erzeugt die folgende Ausgabe:
<!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>
Warum die Abfragezeichenfolge umschreiben und &amp;amp;amp;
转换为 &amp;amp;amp;
(zwischen bar und baz) einfügen?
Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden?
Ich versuche eine Vorlagenkonvertierung durchzuführen, möchte aber nicht, dass dadurch meine URLs beschädigt werden.
html.parse
想要生成有效的 html,并且 html 规范规定 href
Das kaufmännische Und im Attribut muss codiert sein.
https://www.w3.org/tr/xhtml1/guidelines .html#c_12
In SGML und XML deklariert das kaufmännische Und-Zeichen („&“) den Anfang einer Entitätsreferenz (z. B. steht ® für das eingetragene Markensymbol „®“). Leider ignorieren viele HTML-Benutzeragenten stillschweigend die falsche Verwendung des &-Symbols in HTML-Dokumenten und behandeln ein &-Symbol, das nicht wie eine Entitätsreferenz aussieht, als wörtliches &-Symbol. XML-basierte Benutzeragenten tolerieren diese falsche Verwendung nicht und jedes Dokument, das das &-Symbol falsch verwendet, ist nicht „gültig“ und entspricht daher nicht dieser Spezifikation. Um sicherzustellen, dass das Dokument mit historischen HTML-Benutzeragenten und XML-basierten Benutzeragenten kompatibel ist, muss das im Dokument verwendete &-Symbol, das als Literalzeichen behandelt wird, sich selbst als Entitätsreferenz (z. B. „&“) darstellen.
Wenn sich beispielsweise das href-Attribut des a-Elements auf ein CGI-Skript mit Parametern bezieht, muss es als 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
ausgedrückt werden.
In diesem Fall macht Go Ihr HTML tatsächlich besser und effizienter
Davon abgesehen wird der Browser es maskieren. Wenn Sie also darauf klicken, ist die resultierende URL immer noch korrekt (ohne das &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>
Das obige ist der detaillierte Inhalt vonGolang html.Parse schreibt die href-Abfragezeichenfolge so um, dass sie & enthält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!