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

Langage PHP Discussion :

Equivalent à htmlentities pour xml [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut Equivalent à htmlentities pour xml
    Bonjour.

    Je cherche un code php pour encoder un texte afin qu'il soit compatible avec du xml. Je m'explique.

    Je voudrais que les caractères spéciaux soient codés avec des équivalents xml (é = & #233; et non pas é ).

    Tout ceci afin de rendre un texte en xml pour l'exploiter ensuite dans un fichier Flash.

    Donc si quelqu'un a une solution, cela m'aiderait bien et m'éviterait de remplacer tous les caractères spéciaux manuellement...

    Merci d'avance !!

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    tu ne trouveras pas un tel code, et c'est d'ailleurs heureux car d'une part cela relève de la grosse bidouille, d'autre part l'étendue des conversions en références dépend de l'encodage choisi pour le fichier de sortie ; par exemple, pour un encodage en US-ASCII, tous les caractères dont la valeur Unicode est supérieure à 127 devront être convertis en références de caractères, ce qui n'est pas une mince affaire...

    Le plus fiable, le plus simple, bref le plus « propre » consiste à générer directement du XML avec XMLWriter, et lui laisser le sale boulot consistant à transformer en entités ou références de caractères ce qui doit l'être.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    Merci pour votre réponse.

    En fait, j'avais besoin de passer par le PHP car je ne comptais pas écrire le texte directement, mais passer par une base de données.

    C'est à dire que les différents textes sont entrés dans une base de données via une partie administration en PHP, puis une animation Flash récupère les entrées de la base de données pour les afficher.

    Comme Flash ne peut récupérer des données qu'au format XML (apparemment), il me fallait donc encoder les textes, soit au moment de l'enregistrement dans la base de données, soit au moment de la récupération.

    Et comme je suis censé ne pas être le seul à alimenter la base données, le système du logiciel n'est pas idéal...

    Mais merci beaucoup du renseignement, je vais de ce pas télécharger ce logiciel en attendant de coder mon propre programme de remplacement de caractères spéciaux...

    Sinon, si vous avez d'autres suggestions...

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Tu pourrais utiliser une fonction comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function personal_entities($string)
    {
       static $tab = array();
       $entities = get_html_translation_table(HTML_ENTITIES);
       foreach( $entities as $k => $v )
          $tab[$k] = '&#' . ord($k) . ';';
       return strtr($string, $tab);
    }
    A voir si ça peut te convenir.

    [edit]

    Mais en fait pourquoi vouloir utiliser des entités dans ton xml ?
    A part pour les guillemets (attributs), chevrons, ce n'est pas nécessaire si on a défini le bon encodage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    Ben, en fait, l'encodage du fichier XML semble être le bon (encoding="UTF-8"), mais lors de la lecture par le Flash, j'ai de jolis points d'interrogations en lieu et place des caractères accentués...

    D'où la recherche d'un encodage par php.

    Je vais essayer votre code et vous tiendrais au courant.

    [edit]

    Je viens de m'apercevoir que la version du fichier était 1.0
    (<?xml version='1.0' encoding='UTF-8' ?>)

    Cela peut-il jouer dans le résultat ?

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Non, la version d'xml n'a pas de rapport.

    Comment est généré ton xml ?
    D'où proviennent les données qui y sont enregistrées ?

    Si elles viennent d'une base de données, il faut savoir dans quel encodage elles sont stockées, tu dois les transformer si ce n'est pas le bon charset.

    Pour mysql, voir SET NAMES.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    Pour l'instant, afin de tester la compatibilité avec Flash, les textes sont rentrés manuellement dans le fichier XML... et les accents n'apparaissent pas plus !!

    Donc, je ne pense pas que cela ait quelque chose à voir avec l'encodage de la base de données. Mais je saurais qu'il faut y faire attention lorsque je ferais le transfert.

    Voici l'intégralité du fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8" ?>
    <body>
    <main>
    	<Section>
    		<Titre><TitreSection>A propos du Metteur en Scène :</TitreSection><br><br>
    			<Citation><CitationCSS>"Il y*a maintenant plusieurs étés que j'observe Jan-Luc Delage, mettant en scène des spectacles son et lumière, nécessitant la présence de nombreux participants.<br/>J'ai constaté*à chaque fois la joie des acteurs bénévoles sous sa direction.<br/>En plus d'être un bon comédien,*Jan-Luc est un metteur en scène de spectacle très généreux dans son travail."</CitationCSS></Citation>
    			<Auteur><AuteurCSS>Denis Ardant, comédien</AuteurCSS></Auteur><br><br>
    		</Titre>
    	</Section>
    </main>
    </body>
    PS : Vous remarquerez que les caractères accentués ont déjà été changés... Mais j'ai encore plusieurs textes à encoder.

    PS2 : Je précise qu'il ne s'agit pas de mon site, mais de celui d'un ami.

    Voulez-vous voir le résultat dans le site ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    Encore une précision : si je ne fais aucun encodage des caractères accentués, dans le fichier Flash, au milieu de lettres tout à fait normales, j'obtiens des idéogrammes chinois !!...

    Si ça vous dit quelque chose.

  9. #9
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Je ne connais pas du tout flash, mais je ne pense pas que le problème vienne de son côté.

    Ton fichier est bien enregistré en tant qu'utf-8 ?
    Avec quel éditeur de texte ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    Le fichier est bien enregistré en UTF-8 (cf. plus haut ).

    Il a été créé avec le BlocNotes de Windows, puis modifié avec MFC WordPad et Dreamweaver.

    Mais le logiciel ayant servi à le créer a-t-il vraiment une importance ?

    Je croyais qu'on pouvait créer un fichier HTML, PHP, et donc par extension un fichier XTML, avec n'importe quel logiciel de traitement de texte ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 41
    Par défaut
    J'ai écrit mon programme php afin de rendre un texte standard :
    * compatible avec les standards XML
    * lisible par une animation Flash (en effet, certains caractères XML ne semblent pas être reconnu par Flash, comme le ’ ou le … )

    Je vous le donne ici. Vous pouvez bien entendu rajouter d'autres caractères (comme le symbole euro, auquel je viens de penser )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    function Encodage ($Citation) {
    	$Caracteres = array("…", "’", "à", "â", "ã", "ä", "ç", "è", "é", "ê", "ë", "î", "ï", "ô", "õ", "ö", "ù", "û", "ü", /*L'élément suivant sert à remplacer les sauts de ligne par un <br/>...*/ "
    ", /*...et celui-ci pour les doubles sauts de ligne !!*/ "
    
    ");
    	$Substitut = array("...", "'", "à", "â", "ã", "ä", "ç", "è", "é", "ê", "ë", "î", "ï", "ô", "õ", "ö", "ù", "û", "ü", "<br/>", "<br/><br/>");
    	$Citation = str_replace ($Caracteres, $Substitut, $Citation);
     
    	return $Citation;
    }
     
    /*Il suffit ensuite d'appeler la fonction Encodage en passant le texte à encoder en paramètre.*/
     
    $Texte = Encodage ("Hélène est partie à pied sur l'île…");
     
    /*Elle est c***e cette Hélène.*/
    ?>
    Peut-être sera-t-il utile à quelqu'un un jour ?...

    Sinon, si quelqu'un trouve un code php qui le fait tout seul, pour ma culture personnelle...

    En tout cas, merci pour vos réponses !

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

Discussions similaires

  1. librairie c++ pour xml.???
    Par elekis dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 08/11/2004, 21h46
  2. [String]Convertir pour xml
    Par Pill_S dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 05/11/2004, 20h41
  3. [xml editeur ] quel plugin pour xml?
    Par champion dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/08/2004, 10h52
  4. Equivalent à TCppWebBrowser pour BCB5 Standard
    Par bartfr dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/03/2004, 17h11
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 22h07

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