CONVERTIR LES CODE HTML EN CARACTÈRES SPÉCIAUX

Messages postés
1800
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 mai 2019
- - Dernière réponse : cs_wari
Messages postés
19
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
19 décembre 2008
- 7 janv. 2008 à 08:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/44329-convertir-les-code-html-en-caracteres-speciaux

Afficher la suite 
japee
Messages postés
1800
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 mai 2019
-
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
japee
Messages postés
1800
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
15 mai 2019
-
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.
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.
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
Commenter la réponse de japee