Question

Supposons que mon application Web affiche la balise suivante :

<object type="application/x-pdf" data="http://example.com/test%2Ctest.pdf">
     <param name="showTableOfContents" value="true" />
     <param name="hideThumbnails" value="false" />
</object>

Devrait data l'attribut doit-il être échappé (chemin codé en pourcentage) ou non ?Dans mon exemple, c'est le cas.Je n'ai trouvé aucune spécification.

Addenda

En fait, je suis intéressé par des spécifications sur ce que les plugins de navigateur devraient consommer data attribut attendez-vous à y voir.Par exemple, le plugin Adobe Acrobat prend à la fois les uri avec échappement et sans échappement.Cependant, QWebPluginFactory friandises data attribut en tant qu'URI lisible par l'homme (sans échappement), ce qui conduit à un codage à double pour cent.Et je me demande si c'est un bug de QWebPluginFactory ou non.

Était-ce utile?

La solution

Le data attribut s'attend à ce que la valeur soit un URI.Vous devez donc fournir une valeur qui est un URI syntaxiquement valide.

La spécification actuelle des URI est RFC3986.Pour voir si le , dans le chemin de l'URI doit être codé, regardez comment le chemin la règle de production est définie :

path          = path-abempty    ; begins with "/" or is empty
              / path-absolute   ; begins with "/" but not "//"
              / path-noscheme   ; begins with a non-colon segment
              / path-rootless   ; begins with a segment
              / path-empty      ; zero characters

Puisque nous avons un URI avec autorité informations, nous devons examiner chemin vide (voir URI règle de production):

path-abempty  = *( "/" segment )

segment est nul ou plus pchar personnages qui sont définis comme suit (j'ai déjà élargi les règles de production) :

pchar         = ALPHA / DIGIT / "-" / "." / "_" / "~" / "%" HEXDIG HEXDIG / "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / ":" / "@"

Et comme vous pouvez le constater, pchar se développe en un littéral ,.Vous n’avez donc pas besoin d’encoder le , dans le chemin composant.Mais comme vous êtes autorisé à encoder n'importe quel caractère non délimitant en utilisant le codage en pourcentage sans changer sa signification, vous pouvez utiliser %2C au lieu de ,.

Autres conseils

Les URL ne peuvent généralement contenir que des caractères spécifiques.Malheureusement, différentes spécifications contiennent différentes listes de caractères considérés comme réservés et ne peuvent donc pas être utilisés.

Dans votre exemple, le caractère codé est une virgule (,), qui est un caractère réservé dans certaines spécifications, il n'est donc pas faux de le coder.

La plupart des serveurs Web doivent gérer les virgules non codées et codées de la même manière, mais certains ne le font pas, en fonction de leur configuration.Pour cette raison, c'est généralement une bonne idée d'éviter d'avoir des caractères spéciaux dans les noms de fichiers (comme vous l'avez dans votre exemple) en premier lieu.

Le codage d'URL est toujours nécessaire lorsque vous avez des caractères spéciaux dans les paramètres GET.Par exemple, un paramètre GET qui permet de prendre C&A car une valeur doit être écrite comme suit :

http://example.com/somescript.php?value=C%26A

MODIFIER:

Les plugins (ou même le navigateur) s'en moquent de toute façon.Ils n'essaient pas (ou n'ont pas besoin de) de le décoder ou quoi que ce soit du genre.Ils demandent simplement l’URL telle qu’elle a été saisie auprès du serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top