Convertir les code html en caractères spéciaux

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 360 fois - Téléchargée 21 fois

Contenu du snippet

Voici le complément à la source poster par Japee :
http://www.delphifr.com/codes/CONVERTIR-CARACTERES-SPECIAUX-CODE-HTML_27193.aspx

J'ai volontairement donné le titre opposé.

Bien sur il est sans doute possible d'améliorer le code (cela ne fait que 4 semaines que je me suis mis à DELPHI.

J'espère qu'il vous servira au temps que le source de Japee m'a était util...

Source / Exemple :


function HtmlToText(S:String):String;
var
  i, index, compteur :integer;
  Stmp, coupe : String;
begin
  Result := '';
  compteur := 0;
  for i:=1 to Length(S) do
  begin
    if i < compteur then continue;
    if ((S[i] = '&') and (S[(i + 1)] = '#')) then
    begin
      index := (i + 2);
      coupe := copy(s, index, Length(S));
      compteur := Pos(';', coupe);
      coupe := copy(coupe, 0, compteur - 1);
      Stmp :=  char(StrToInt(coupe));
      compteur := compteur + index;
    end
    else
      Stmp := S[i];

    Result := Result + Stmp;
  end;
end;

Conclusion :


N'hésitez pas à me faire part de vos remarque (sans être trop méchant)...

Bon Dév à tous

A voir également

Ajouter un commentaire

Commentaires

cs_wari
Messages postés
19
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
19 décembre 2008
-
Salut les programmeurs,
je né pas encore tester ce code mais en premiere vue
ce que je comprent pas, est que vous utilisez un argument s : string en entrée, les chane de ce type ne dépasse pas les 256 caractères.
mm si vous voulez utilisé cette fct ligne par ligne dans un text HTML, je pense qu'il ya des code HTML ou les ligne dépasse largement les 256 caractères, pk ne pas utiliser un mémo par expmple.

cordialement
svendeville
Messages postés
9
Date d'inscription
samedi 10 avril 2004
Statut
Membre
Dernière intervention
11 octobre 2007
-
Salut Japee,

Merci pour tes commentaires et conseils, je confirme que mon code ne pourra être utilsé que si on utilise ta fonction pour convertir en html, c'est justement en ce sens que je l'ai pensé.
En fait nous développons une appli dont l'iterface est entirement faite en français, et pour faire le traduction, j'ai créé en delphi un exctracteur qui vas récupèrer les chaines de cette appli, et pour que les traducteur puissent travailler corectement, je génére un fichier au standard XLIFF, ce qui m'oblige à convertir tous les caractères spéciaux (Là j'utilise ton code), après traduction, je doit reconvertir dans l'appli corectement en texte, donc, j'ai fait cette fonction en contrepartie de la tienne.
Je vais suivre tes conseils pour la boucle et les variables et constantes, et je vais également mettre la source sur la rubrique Snippet.

Encore merci à toi.
Bonne continuation.
japee
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1 -
Ah oui, autre chose...

Ta fonction ne pourra être utilisé que si le texte html a été codé selon un procédé identique à celui que j'utilise.

Et ensuite, dans mon code, il vaut mieux écrire :

STmp := Char(StrToIntDef(Copy(STmp, 3, L - 3), 63));

...on ne sait jamais.
japee
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1 -
Salut svendeville.

Je suis à la fois flatté et désolé que tu fasses référence à un si vieux code que je n'ai pas dépoussiéré depuis que je l'ai posté, il y a bientôt 3 ans...

Bon, 2 ou 3 choses :

Quand j'ai posté le mien, la rubrique Snippet n'existait pas, et le mien comme le tien y seraient plus à leur place.

Il vaut mieux déclarer une variable string en constante quand on la passe en paramètre (si l'on n'a pas besoin de la modifier bien sûr), on y gagne en efficacité. Tu noteras que je ne l'avais pas fait sur mon code, ce qui est un exemple tout à fait déplorable pour les nouvelles générations de Delphistes. Faut dire à ma décharge que je programmais pas depuis ben longtems à c't' époque...

Il faut éviter les instructions "Continue" et "Break" dans une boucle, sauf cas particulier et évident.

Je pense que tu aurais eu intérêt à utiliser plutôt une boucle repeat ou while étant donné que l'incrémentation de l'index dans la chaîne à parcourir n'est pas régulière. Tu aurais ainsi pu faire l'économie de quelques variable.

Voici comment j'aurais fait, en essayant de respecter ton approche :

function HtmlToText2(const S: string): string;
var
Index: Integer;
STmp: string;
L: Integer;
begin
Result := '';
Index := 1;
while Index < Length(S) + 1 do
begin
if (S[Index] = '&') and S[(Index + 1)] = '#') then
begin
STmp := Copy(S, Index, 6);
L := Pos(';', STmp);
STmp := Char(StrToInt( Copy(STmp, 3, L - 3) ));
Inc(Index, L)
end
else
begin
STmp := S[Index];
Inc(Index);
end;
Result := Result + STmp;
end;
end;

Quoi qu'il en soit, je t'encourage à persévérer, c'est plutôt pas mal pour 4 semaines de prog' au compteur.

A plus.

japee

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.