Maison > développement back-end > Golang > le corps du texte

Golang html.Parse réécrit la chaîne de requête href pour contenir &

王林
Libérer: 2024-02-09 23:42:08
avant
1169 Les gens l'ont consulté

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

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.

Contenu de la question

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&baz=quux">wtf</a>
</body>
</html>`

    doc, _ := html.parse(strings.newreader(myhtmldocument))
    html.render(os.stdout, doc)
}
Copier après la connexion
La fonction

html.render produit le résultat suivant :

<!DOCTYPE html><html><head>

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

</body></html>
Copier après la connexion

Pourquoi réécrire la chaîne de requête et mettre & 转换为 & (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.

Solution

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& name=user 而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&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 &,只有 & :

console.log(document.queryselector('a').href)
Copier après la connexion
 <a href="http://www.example.com/input?foo=bar&baz=quux">WTF</a>
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!