Maison >développement back-end >Golang >Golang html.Parse réécrit la chaîne de requête href pour contenir &
L'éditeur PHP Zimo est là pour vous présenter une petite astuce sur Golang. Lors de l'analyse HTML à l'aide de html.Parse, nous devons parfois réécrire la chaîne de requête de href pour inclure le symbole &. Cette technique peut nous aider à être plus flexibles et plus pratiques lors du traitement des liens HTML et à améliorer l'efficacité du développement. Ensuite, nous expliquerons en détail comment utiliser cette technique et donnerons un exemple de code, en espérant qu'il sera utile à tout le monde.
J'ai le code suivant :
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) }La fonction
html.render produit le résultat suivant :
<!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>
Pourquoi réécrire la chaîne de requête et mettre &amp;amp;amp;
转换为 &amp;amp;amp;
(entre bar et baz) ?
Existe-t-il un moyen d'éviter ce comportement ?
J'essaie de faire une conversion de modèle mais je ne veux pas que cela casse mes URL.
html.parse
想要生成有效的 html,并且 html 规范规定 href
L'esperluette dans l'attribut doit être codée.
https://www.w3.org/tr/xhtml1/guidelines .html#c_12
En sgml et xml, l'esperluette ("&") déclare le début d'une référence d'entité (par exemple, ® représente le symbole de marque déposée "®"). Malheureusement, de nombreux agents utilisateurs HTML ignorent silencieusement l'utilisation incorrecte du symbole & dans les documents HTML - traitant un symbole & qui ne ressemble pas à une référence d'entité comme un symbole & littéral. Les agents utilisateurs basés sur XML ne toléreront pas cette utilisation incorrecte, et tout document utilisant incorrectement le symbole & ne sera pas « valide » et ne sera donc pas conforme à cette spécification. Pour garantir que le document est compatible avec les agents utilisateurs HTML historiques et les agents utilisateurs basés sur XML, le symbole & utilisé dans le document, qui est traité comme un caractère littéral, doit se représenter comme une référence d'entité (telle que "&").
Par exemple, lorsque l'attribut href de l'élément a fait référence à un script cgi avec des paramètres, il doit être exprimé comme 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
.
Dans ce cas, go rend votre HTML meilleur et plus efficace
Cela étant dit - le navigateur y échappera, donc si vous cliquez dessus, l'URL résultante sera toujours correcte (sans le &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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!