J'ai rencontré un problème qui a été révélé par notre campagne de marketing basée sur Google adwords. L'un des paramètres standard utilisés est la "région". Lorsqu'un utilisateur effectue une recherche et clique sur un lien sponsorisé, Google génère une longue URL pour suivre le clic et envoie un tas d'informations dans le référent. Nous capturons ces données pour nos dossiers et nous avons remarqué que le paramètre "région" n'est pas correctement pris en compte. Ce qui devrait être
http://ravercats.com/meow?foo=bar®ion=catnip
est en train de s'imposer comme :
http://ravercats.com/meow?foo=bar®ion=catnip
J'ai vérifié que cela se produit dans tous les navigateurs. Je crois savoir que Syntaxe des entités HTML est défini comme suit :
&VALUE;
où la limite avant est l'esperluette et la limite arrière est le point-virgule. Cela semble assez simple. Le problème est que cela n'est pas respecté pour l'entité ®, et que cela provoque toutes sortes de dégâts dans notre système.
Quelqu'un sait-il pourquoi cela se produit ? S'agit-il d'un bogue dans la DTD ? (Je cherche la DTD HTML actuelle pour voir si je peux la comprendre) J'essaie de comprendre ce qui serait commun à tous les navigateurs pour que cela se produise, d'où ma recherche de la DTD.
Voici une preuve que vous pouvez utiliser. Prenez ce code, créez un fichier HTML à partir de celui-ci et affichez-le dans un navigateur :
<html>
<a href="http://foo.com/bar?foo=bar®ion=US®ister=lowpass®_test=fail&trademark=correct">http://foo.com/bar?foo=bar®ion=US®ister=lowpass®_test=fail&trademark=correct</a>
</html>
EDIT : Pour tous ceux qui suggèrent que je dois échapper l'intégralité de l'URL, les exemples d'URL ci-dessus sont exactement cela, des exemples. L'URL réelle provient directement de Google et je n'ai aucun contrôle sur la façon dont elle est construite. Ces suggestions, bien que valables, ne répondent pas à la question : "Pourquoi cela se produit-il".
3 votes
Essayez peut-être de remplacer votre & par
&
ou l'esperluette codée en URL%26
?6 votes
Votre sans-capture
&
est illégal en HTML en premier lieu. Essayer de légiférer sur le langage du navigateur permissif après cela est un peu stupide. (BTW, cela fonctionne bien dans Firefox ; c'était un bug corrigé en 2005).5 votes
Il s'agit d'exemples d'URL. L'URL réelle provient directement de Google, je n'ai donc aucun contrôle sur elle. J'apprécie les suggestions, mais elles ne répondent pas à la question de savoir POURQUOI cela se produit, spécifiquement pour l'entité "reg" et aucune autre.
1 votes
L'url provient de google ou du html contenant l'url ? & est parfaitement bien dans une url, mais doit être encodé en html.