IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Transformer les accents en entités HTML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut Transformer les accents en entités HTML
    Bonjour.

    Je vous expose mon problème :
    J'ai crée une petite application qui fait des graphiques en SVG avec Qt.
    Jusqu'à présent pas de problème de ce côté, tout marche impec' .

    Mon graphique a un nom et une description (logique) qui peuvent contenir des accents (à cause de nous les français ).
    Le problème (minime certes mais gênant), c'est que les accents sont enregistrés directement dans le fichier SVG généré et ça gène les parseurs que j'utilise pour tester (Firefox et Chrome).

    J'aimerai donc savoir :
    - Y a-t-il une fonction (que je n'ai pas trouvé malgré mes recherches) pour transformer ces accents en entités é en é ou é (si c'est possible en SVG, j'ai un doute)
    - Sinon faut-il encoder le fichier en utf-8 (vaines recherches encore )?

    Le bout de code que j'utilise (simplifié) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        QDomDocument doc;
     
        QDomElement root = doc.createElement("svg");
        doc.appendChild(root);
     
        QDomElement title = doc.createElement("title");
        title.appendChild( doc.createTextNode( "Température à Paris" ) );
        root.appendChild(title);
     
        QDomElement desc = doc.createElement("desc");
        desc.appendChild( doc.createTextNode( "Moyenne des températures dans la ville de Paris" ) );
        root.appendChild(desc);
    ... pour la création du document

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        QFile file("output.svg");
        file.open(QIODevice::WriteOnly);
        file.write(doc.toString(4).toAscii());
        file.close();
    ... pour l'enregistrement.

    Merci de votre aide.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Il faut le faire manuellement, à coup de s.replace("é", "é"); ou utiliser une lib externe (par exemple cpp2html)

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Merci gbdivers d'avoir répondu aussi rapidement.

    Bon c'est bien ce que je craignais...

    Ceci dit j'ai regardé cpp2html il fait comme un QDomText : il remplace les & en &amp;, les < en &lt; mais pas les accents !

    Sinon je peux faire comme tu l'as dit mais c'est pas évolutif, il faudrait faire ça pour tous les caractères (chinois et autres)

    Je continue à chercher.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    il faudrait faire ça pour tous les caractères (chinois et autres)
    A priori, non...
    Seuls les caractères ASCII étendu sont pris en charge. Sinon, il faut passer en utf-8 et dans ce cas, pas besoin de convertir é en &eacute;

    Je ne suis pas expert en SVG mais on doit pouvoir utiliser la base "encodage=utf8" je pense. Au pire, utilise Inkscape pour voir le code SVG généré.

    Sinon je peux faire comme tu l'as dit mais c'est pas évolutif
    Tu peux te baser sur les tables de la norme ISO (ici, ici et ici par exemple).


    Sinon, pourquoi tu n'utilises pas le module QtSVG ?

    EDIT : j'ai fait le test avec Inkscape. Le é apparait bien dans le code XML mais il y a une balise encoding="UTF-8"

  5. #5
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Sinon, il faut passer en utf-8 et dans ce cas, pas besoin de convertir é en &eacute;
    Ça revient donc à ma 2ème question, il faut encoder en utf-8.

    Le soucis, c'est que QFile que j'utilise enregistre en ascii automatiquement, ce qui déplait aux parseurs.
    Je doit trouver le moyen d'enregistrer le fichier en utf-8 et c'est ce que je n'ai pas encore trouvé.

    Citation Envoyé par gbdivers Voir le message
    Sinon, pourquoi tu n'utilises pas le module QtSVG ?
    Je l'ai utilisé (un QSvgRenderer couplé à un QPainter), mais ça ne me plaisait pas car, mis à part le coté pratique (dessiner des "pie" pour les diagramme en camembert assez facilement), ça faisait un fichier "statique" (impossible de grossir la part du camembert au survol de la souris, par exemple).

    Je continue à chercher pour enregistrer le fichier en utf-8 de mon côté.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour insérer les attributs XML (encoding="UTF-8"), tu peux utiliser QDomDocument::createProcessingInstruction


    Pour l'encodage UTF8, peut être QTextCodec ?
    EDIT : pour utiliser QFile et QTextCodec, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    doc = QDomDocument(...);
    QFile file(filename);
    QTextStream stream(&file);
    stream.setCodec(QTextCodec::codecForName("UTF-8"));  
    doc.save(stream, 1);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/05/2013, 16h31
  2. Transformer les accents en leurs equivalents HTML
    Par kedare dans le forum Django
    Réponses: 1
    Dernier message: 26/03/2009, 15h03
  3. Réponses: 5
    Dernier message: 18/03/2008, 11h26
  4. Réponses: 1
    Dernier message: 26/09/2007, 19h38
  5. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo