Auteur Sujet: Tutoriel pour poster une URL avec des crochets  (Lu 13271 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 170
    • Twitter LaFibre.info
Tutoriel pour poster une URL avec des crochets
« le: 22 février 2016 à 08:33:21 »
http://www.cpubenchmark.net/compare.php?cmp[]=2075&cmp[]=1304  (comment on crée un lien ici avec ] dans l'url ?)
SMF ne permet pas de créer d'URL avec des crochets dans l'URL [ ]

L'ARCEP utilise régulièrement des crochets dans ses URL et pour mettre un lien vers une IPv6 sans nom de domaine, il faut aussi des crochets  >:(.

Hugues

  • AS2027 MilkyWan
  • Modérateur
  • *
  • Messages: 12 440
  • Lyon (69) / St-Bernard (01)
    • Twitter
Tutoriel pour poster une URL avec des crochets
« Réponse #1 le: 22 février 2016 à 10:08:34 »
Ben faites des bit.ly et un lien HTML après, non ?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Tutoriel pour poster une URL avec des crochets
« Réponse #2 le: 22 février 2016 à 14:01:23 »
Solution :

Remplacer [ par %5B
Remplacer ] par %5D


Exemple : http://www.cpubenchmark.net/compare.php?cmp%5B%5D=2075&cmp%5B%5D=1304

vivien

  • Administrateur
  • *
  • Messages: 47 170
    • Twitter LaFibre.info
Tutoriel pour poster une URL avec des crochets
« Réponse #3 le: 22 février 2016 à 18:33:47 »
Merci kgersen !

Cela ne semble pas fonctionner pour l'IPv6 : http://%5B2a01:6e00:10:410::2%5D/

Pour rappel, les IPv6 doivent être mises entre crochets ( cela correspond à http://[2a01:6e00:10:410::2]/ )

Hugues

  • AS2027 MilkyWan
  • Modérateur
  • *
  • Messages: 12 440
  • Lyon (69) / St-Bernard (01)
    • Twitter
Tutoriel pour poster une URL avec des crochets
« Réponse #4 le: 22 février 2016 à 18:37:11 »
Marche pas chez moi. Le lien ne se clique même pas, sur Firefox, Mac avec IPv6 sur mon réseau

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Tutoriel pour poster une URL avec des crochets
« Réponse #5 le: 22 février 2016 à 20:40:53 »
oui ca ne marche pour une adresse IPv6.

Pourtant la norme d'encodage d'url ( http://www.w3schools.com/tags/ref_urlencode.asp) couvre toute l'url , pas juste la partie du 'path'.

et si on passe "http://[2a01:6e00:10:410::2]/" a la fonction JavaScript encodeURI ca donne bien "http://%5B2a01:6e00:10:410::2%5D/"

c'est donc que les navigateurs ont décidé de ne pas respecter la norme ?

corrector

  • Invité
Tutoriel pour poster une URL avec des crochets
« Réponse #6 le: 23 février 2016 à 17:36:03 »
oui ca ne marche pour une adresse IPv6.

Pourtant la norme d'encodage d'url ( http://www.w3schools.com/tags/ref_urlencode.asp) couvre toute l'url , pas juste la partie du 'path'.

et si on passe "http://[2a01:6e00:10:410::2]/" a la fonction JavaScript encodeURI ca donne bien "http://%5B2a01:6e00:10:410::2%5D/"

c'est donc que les navigateurs ont décidé de ne pas respecter la norme ?
Qu'est-ce qui te fait penser que c'est autorisé?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Tutoriel pour poster une URL avec des crochets
« Réponse #7 le: 23 février 2016 à 18:14:54 »
Qu'est-ce qui te fait penser que c'est autorisé?

je posais la question donc.

en regardant: https://url.spec.whatwg.org/#host-parsing

effectivement les "[" et "]" de l'IPv6 ne font pas l'objet d'un UTF-8 decode.

la fonction encodeURI est donc fausse ?

edit: dixit mozilla, encodeURI date d'avant donc n'a pas été retro-corrigée. ils proposent :

Also note that if one wishes to follow the more recent RFC3986 for URLs, which makes square brackets reserved (for IPv6) and thus not encoded when forming something which could be part of a URL (such as a host), the following code snippet may help:

function fixedEncodeURI (str) {
    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

ce qui n'est pas bon non plus car replace tout les crochets et pas que ceux de l'IPv6...

tst sous F12 , console:

console.log(encodeURI("http://[2a01:6e00:10:410::2]/hello[world]").replace(/%5B/g, '[').replace(/%5D/g, ']'));
affiche http://[2a01:6e00:10:410::2]/hello[world]
au lieu de http://[2a01:6e00:10:410::2]/hello%5Bworld%5D

corrector

  • Invité
Tutoriel pour poster une URL avec des crochets
« Réponse #8 le: 23 février 2016 à 18:29:25 »
À la réflexion :

Request for Comments: 3986

           Uniform Resource Identifier (URI): Generic Syntax

      host        = IP-literal / IPv4address / reg-name

   The syntax rule for host is ambiguous because it does not completely
   distinguish between an IPv4address and a reg-name.  In order to
   disambiguate the syntax, we apply the "first-match-wins" algorithm:
   If host matches the rule for IPv4address, then it should be
   considered an IPv4 address literal and not a reg-name.  Although host
   is case-insensitive, producers and normalizers should use lowercase
   for registered names and hexadecimal addresses for the sake of
   uniformity, while only using uppercase letters for percent-encodings.

   A host identified by an Internet Protocol literal address, version 6
   [RFC3513] or later, is distinguished by enclosing the IP literal
   within square brackets ("[" and "]").  This is the only place where
   square bracket characters are allowed in the URI syntax.  In
   anticipation of future, as-yet-undefined IP literal address formats,
   an implementation may use an optional version flag to indicate such a
   format explicitly rather than rely on heuristic determination.

      IP-literal = "[" ( IPv6address / IPvFuture  ) "]"

      IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )


C'est clair : il faut mettre [ et ] et pas %machin et %chose.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Tutoriel pour poster une URL avec des crochets
« Réponse #9 le: 23 février 2016 à 18:52:29 »
dans la partie 'host' oui mais ailleurs ?

Ce qui n'est pas clair c'est dans le reste de l'URL: les [ ] ne sont pas autorisés sauf si encodés ? ou pas du tout ?

This is the only place where square bracket characters are allowed in the URI syntax

http://[2a01:6e00:10:410::2]/hello%5Bworld%5D c'est légal ou pas ?

dixit https://validator.w3.org ca l'est.

avec par exemple:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>test</title>
</head>
<body>
<p>
<a href="http://[2a01:6e00:10:410::2]/hello%5Bworld%5D">test</a>
</p>
</body>
</html>

corrector

  • Invité
Tutoriel pour poster une URL avec des crochets
« Réponse #10 le: 23 février 2016 à 19:22:18 »
Dans le reste, tu encodes ce que tu veux (je pense).

corrector

  • Invité
Tutoriel pour poster une URL avec des crochets
« Réponse #11 le: 25 février 2016 à 21:18:40 »
Ben faites des bit.ly et un lien HTML après, non ?
Comme ça on rend les liens sortants dépendants de
- de l'infrastructure de bit.ly
- du registre ly
- du pays (très stable et pacifié) correspondant à ce registre