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

Free Pascal Discussion :

Traduire du texte HTML accentué dans les deux sens


Sujet :

Free Pascal

  1. #1
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Traduire du texte HTML accentué dans les deux sens
    Bonjour à toutes & à tous,

    Mon titre n'est pas très clair alors je vais développer :

    Les caractères accentués dans un page HTML ne sont inscrits littéralement mais codés ( Général = Général).
    Ma question est la suivante, existe t-il un composant/unité qui se charge de faire la traduction dans un sens comme dans l'autre ?

    Merci d'avance !

  2. #2
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut suite...
    Je me suis fais avoir...J'ai voulu donné en exemple entre parenthèse la version html = version littérale...mais les balises html sont correctement interprétés dans les billets.
    Du coup, mon exemple ne veut plus rien dire ( Général = Général ).

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Tu voulais dire une fonction qui tranforme "Général" en

    et inversement ?

    Quelqu'un doit sûrement avoir fait ça. Autrement ça ne doit pas être trop difficile à faire.

  4. #4
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Exactement
    C'est tout à fait ça !

    Effectivement, écrire une fonction qui se chargerait de ça n'est pas compliqué, juste long et fastidieux...
    Et comme je ne dois pas être le premier à avoir besoin de cette fonctionnalité, j'imagine/espère qu'un composant ou unité existe déjà.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    J'ai trouvé une unité qui fait le travail demandé, mais dans un sens seulement. Il s'agit de l'unité BBUtils, disponible sur cette page.

    J'ai extrait la partie intéressante du long programme de test fourni avec l'unité. Je le mets en pièce jointe, parce que je ne sais pas si le code pourrait être copié depuis le message sans dommage.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    J'ai trouvé une unité qui fait le travail demandé, mais dans un sens seulement. Il s'agit de l'unité BBUtils, disponible sur cette page.
    J'ai regardé, du même auteur, la bibliothèque Internet Tools. Ça m'a paru très bien fait. Je pense qu'il y a tout ce qu'il faut là-dedans, mais encore faut-il le trouver et savoir s'en servir. J'ai essayé un peu toutes les démos : je n'ai pas tout compris.

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Il y a aussi, dans l'unité HtmlDefs de Lazarus, la fonction ResolveHtmlEntityReference.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      HTMLDefs;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button2: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button2Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      c: widechar;
    begin
      if ResolveHTMLEntityReference(Edit1.Text, c) then
        Edit2.Text := UTF8Encode(WideCharLenToString(@c, 1)) else
        Edit2.Text := '?';
    end;
     
    end.
    Images attachées Images attachées  

  8. #8
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut suite...et fin !
    Bonjour et merci à toi Roland,

    Une première chose, je viens de découvrir par hasard tes nouveaux messages et par la même occasion qu'il faut stipuler dans la combo du bas que l'on veut être notifié en temps réel par email...
    Du coup, n'ayant aucune nouvelle, je me suis lancé dans la rédaction de quelque chose pour faire le boulot.
    Je joint humblement mon unité au cas où quelqu'un d'autre en aurait l'utilité.
    Le seul avantage de mon unité par rapport aux solutions que tu as trouvées, c'est sa simplicité d'utilisation et son exhaustivité.
    J'ai encore deux ou trois choses à faire mais dans l'ensemble, c'est déjà fonctionnel.
    A noter, la conversion s’effectue uniquement dans le sens HTML => Texte, ce dont j'ai besoin. La fonction inverse ne m'étant pas utile et à y regarder de plus près, beaucoup plus compliqué à réaliser, je ne suis même pas sûr de m'y atteler un jour...

    Boujou à tous !

    htmlcharconv.pas.zip

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Pas de quoi ! Merci à toi pour le partage de ton code.

    J'en ai fait un essai rapide. A moins que je ne m'y sois mal pris, certaines entités ne sont pas remplacées. C'est peut-être volontaire, vu les caractères dont il s'agit ?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    program exemple;
     
    uses
      htmlcharconv;
     
    var
      cc: THtmlCharConv;
      s: string;
      o: text;
     
    begin
      cc := THtmlCharConv.Create;
     
      s := '<td>Date de P&acirc;ques pour l&apos;ann&eacute;e courante&comma; par l&apos;algorithme d&apos;Oudin&period;</td>';
     
      s := cc.HtmlToText(s);
     
      Assign(o, 'resultat.txt');
      Rewrite(o);
      Write(o, s);
      Close(o);
     
      {
      <td>Date de Pâques pour l&apos;année courante&comma; par l&apos;algorithme d&apos;Oudin&period;</td>
      }
    end.
    J'ai pas mal travaillé sur le sujet de mon côté, mais je ne crois pas que tu gagnerais à échanger ton code contre le mien.

    Encodeur et décodeur HTML

  10. #10
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Nouvelle version
    De retour avec plein de corrections !
    Effectivement, ton test ne passait pas puisqu'il me manquait PLEIN d'équivalence...Merci à ton lien qui a complété la liste.
    Cette fois, je pense avoir peu ou prou la liste exhaustive de tous les caractères spéciaux, corrigé d'énormes bugs et ajouté une levée d'exception rudimentaire au cas où on tomberai sur une chaîne inconnue.
    Au regard du travail que tu as fournis (cf. http://www.developpez.net/forums/d14...rrespondantes/ ) pendant que j'attendais bêtement un email de notification, je vais m'atteler à la fonction inverse.

    @ bientôt

    htmlcharconv.pas.zip

  11. #11
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Version complète
    Finalement, une fois compris la façon de stocker les caractères dans une chaîne, réaliser la fonction inverse n'était pas si difficile.
    Donc voilà, la classe est complète, html vers texte et texte vers html.
    J'ai cependant une petite crainte à propos de la fonction texte vers html, notre belle langue permettant deux caractères accentués consécutifs, la fonction risque de générer un faux positif (voir le code, trop compliqué à expliquer). Ceci dit, j'ai fait quelques tests "légitimes" et ça passe mais on ne sait jamais.
    Si quelqu'un a une idée sur le sujet...

    @+

    htmlcharconv.pas.zip

  12. #12
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut Version complète (sans code de debug)
    Petit oubli de ma part, j'avais laissé du code de debug.

    htmlcharconv.pas.zip

Discussions similaires

  1. Image + texte alignés dans les deux sens
    Par ROUGEXIII dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 04/09/2011, 16h19
  2. lier des cellules dans les deux sens
    Par noisat dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 30/06/2008, 16h42
  3. [Oracle 8i] Jointure externe dans les deux sens
    Par Drizzt [Drone38] dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/09/2006, 15h10
  4. Double HashMap (Parcours dans les deux sens)
    Par Graffity dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/02/2006, 11h02
  5. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11

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