mviewer / mviewerstudio

mviewer generator
GNU General Public License v3.0
15 stars 25 forks source link

MEG - VSR : encodage des fichiers créés par studio #243

Closed lecault closed 1 year ago

lecault commented 1 year ago

L'encodage des fichiers générés par studio rend le fichier XML pas très propre.

Exemple : <application title="Lycées de Bretagne"

Alors je viens de tester l'import d'un fichier généré par studio avec cette encodage, mviewer interprète bien l'encodage donc il est réutilisable en l'état.

Si dans un fichier avec ces encodages, on met des accents ça passe aussi. Donc c'est plus une problématique esthétique. Non bloquant.

Gaetanbrl commented 1 year ago

L'encodage des fichiers générés par studio rend le fichier XML pas très propre.

C'est un encodage simple des caractères spéciaux (HTML). On a ce type d'encodage dans le XML pour tout ce qui est HTML dans une propriété mviewer (e.g attributions).

Gaetanbrl commented 1 year ago

Je vais l'échapper pour que ce soit + lisible

Gaetanbrl commented 1 year ago

pas si simple, etree ne semble pas bien lire le type string qui a été sauvegardé sur le serveur après l'avoir échappé

Gaetanbrl commented 1 year ago

Je confirme, l'échappement total du fichier impose d'échapper les propriété volontairement échapée pour être lisible dans mviewer (comme les attributions). L'échappement dans le backend va donc échapper ces propriétés et créer un XML invalide.

Exemple :

attribution="&lt;a href=\'https://geoservices.ign.fr\' target=\'_blank\'&gt;&lt;img src=\'https://geoservices.ign.fr/images/logoIGN.png\'&gt;&lt;/a&gt;"

... va rendre :

attribution="<a href=\'https://geoservices.ign.fr\' target=\'_blank\'><img src=\'https://geoservices.ign.fr/images/logoIGN.png\'></a>"

Et semble provoquer un soucis de lecture dans la lib Python de parcours d'un XML (ET).

spelhate commented 1 year ago

C'est un encodage simple des caractères spéciaux (HTML). On a ce type d'encodage dans le XML pour tout ce qui est HTML dans une propriété mviewer (e.g attributions).

Je sais que c'est nécessaire également dans les liens web pour ne pas avoir des & qui ferait planter mviewer. Du coup vous encodez tous les attributs xml ?

Gaetanbrl commented 1 year ago

Du coup vous encodez tous les attributs xml ?

L'encodage semble automatique lors de la lecture du XML via Flask (lorsqu'on sauvegarde le XML). Je n'ai rien réglé de ce côté et lorsqu'on parse le XML, il y a déjà l'encodage.

Le decode en UTF-8 n'est pas appliqué car il semble encodé en entité HTML.

Gaetanbrl commented 1 year ago

Ah non c'est visiblement après, à la sauvegarde.

Voilà ce que le front envoi :

<dc:title>lycée</dc:title>\n

Voilà ce que Python récupère (flask -> String -> ET) :

<application\r\n title="lycée"

Voici ce qu'on sauvegarde (ET vers string):

xml_to_string = ET.tostring(xml)

title="lyc&#233;e"

Gaetanbrl commented 1 year ago

OK vu il faut préciser l'encodage à la transformation ET -> String :

De ...

xml_to_string = ET.tostring(xml).decode("utf-8")

en...

xml_to_string = ET.tostring(xml, "utf-8").decode("utf-8")

lecault commented 1 year ago

C'est bon merci