CONVERTIR LES CODE HTML EN CARACTÈRES SPÉCIAUX

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 9 oct. 2007 à 15:22
cs_wari Messages postés 16 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.

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

cs_wari Messages postés 16 Date d'inscription mercredi 28 août 2002 Statut Membre Dernière intervention 19 décembre 2008
7 janv. 2008 à 08:07
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
11 oct. 2007 à 09:25
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 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 oct. 2007 à 15:51
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 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 oct. 2007 à 15:22
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
Rejoignez-nous