Ça vient de changer mais les apostrophes sont toujours inutilement
codées maintenant %27 au lieu de ' directement (les valeurs sont entre
guillemets ASCII ", il n'est pas nécessaire, et il ne FAUT PAS les
réencoder sous forme URL-encodée ! Ce ne sont pas des URL's ! et ce
seront des % qui seront enregistrés dans la base).

Bref ne pas utiliser urlencode() mais htmlquote() puis substituer
""" par les apostrophes simples si htmlquote les a encodées ou ne
propose pas de paramètre pour indiquer quelles caractères sont "safe"
et ne nécessitent pas d'encodage.

A mon avis il est suffisant d'utiliser ni urlencode() ni htmlquote(),
mais une fonction xmlquote() qui sait (ou prend en paramètre) que les
valeurs données sont entre guillemets doubles, ou bien qui détermine
automatiquement quels guillemets ou apostrophes. Il est plus simple
dans cette fonction :
- tester si la chaîne contient la séquence de 9 caractères <![CDATA[
car il faut y remplacer au moins un des caractères sous la forme &#xx;
avec la valeur du point de code Unicode entier (pas sous la forme %nn
codant un octet UTF-8 pour l'inclusion dans une URL !!!)
- tester ensuite si la chaîne contient des " et des '
- s'il n'y ni l'un ni l'autre, retourner la chaine source entre "
(arbitrairement)
- s'il n'y a que des ', retourner la chaine source entre "
- s'il n'y a que des ", retourner la chaine source entre '
- s'il y a les deux, remplacer alors les " par &quot;, puis retourner
cette chaine entre "

A priori les frameworks du language utilisé pour écrire rawedit
doivent déjà inclure cette fonction (généralement c'est une fonction
htmlquote() avec des paramètres optionnels pour les caractères "safe",
ou une fonction quote() qui choisit et ajoute les guillemets ou
apostrophes encadrant la chaine retournée, selon le language cible,
ici du XML).

Le 17 janvier 2013 01:44, Philippe Verdy <verd...@wanadoo.fr> a écrit :
> A qui signaler une anomalie sur Osmose/rawedit:
>
> erreur "Can't parse XML data" : ce code est tel que généré par
> "rawedit" (l'erreur est dans le tag description=*, ici écrit en
> français):
>
> <way id="40404085" version="5">
>   <nd ref="488562713" />
>   <nd ref="488562714" />
>   <nd ref="488562715" />
>   <nd ref="488562716" />
>   <nd ref="488562717" />
>   <nd ref="488562718" />
>   <nd ref="488562719" />
>   <nd ref="488562720" />
>   <nd ref="488562722" />
>   <nd ref="488562723" />
>   <nd ref="488562724" />
>   <nd ref="488562726" />
>   <nd ref="488562727" />
>   <nd ref="488562728" />
>   <nd ref="488562729" />
>   <nd ref="488562713" />
>   <tag k="attraction" v="expo" />
>   <tag k="building" v="yes" />
>   <tag k="description" v="Attraction d'après le film "Vingt Mille
> Lieues sous les mers" (1954)" />
>   <tag k="name" v="Les Mystères du Nautilus" />
>   <tag k="source" v="cadastre-dgi-fr source : Direction Générale des
> Impôts - Cadastre. Mise à jour : 2009" />
>   <tag k="tourism" v="attraction" />
>   <tag k="wikipedia:en" v="Les Mystères du Nautilus" />
>   <tag k="wikipedia" v="fr:Les Mystères du Nautilus" />
> </way>
>
> rawedit insiste encore pour réencoder les apostrophes inutilement sous
> la forme &apos; (peu lisible on peut mettre ' directement)
> Mais il ne réencode pas les guillemets ASCII alors que c'est le
> délimiteur de chaînes utilisé.
>
> (on peut contourner facilement en remplaçant ces guillemets à la main
> sous la forme &quot;, ou bien avec les guillemets français ici puisque
> la valeur est données en français).

_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Répondre à