Utilisation d' HTMLDecode()

If you need help on how to use the program
Post Reply
player_one
Posts: 5
Joined: 2012-01-12 11:46:09

Utilisation d' HTMLDecode()

Post by player_one »

Bonjour,

AMC version 4.1.0.

Je mets à jour le script DVDPOST.BE et je touche au but, toutefois j'ai un problème avec l'utilisation de HTMLDecode(). Cela ne fonctionne simplement pas du tout. J'ai fouillé d'autres scripts et sur la toile. Rien. Quelles erreurs aurais-je commises?
Ou trouver de l'info?
Comment utiliser HTMLDecode()?

Merci de toute aide.

:??:
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Bonjour,
C'est utilisé dans beaucoup de scripts, donc a priori ça fonctionne... il faudrait des détails : comment est-il utilisé, et un exemple de chaîne non décodée.
Il modifie la variable passée en paramètre, donc appel genre :
HTMLDecode(s);
après appel, les entités HTML trouvées dans "s" sont converties.
player_one
Posts: 5
Joined: 2012-01-12 11:46:09

Post by player_one »

Merci de ta réponse,
Quelques extraits copiés-collés:
1 Déclarations:

Category, Country, Description, Comments, Languages : String;
Subtitles, gauche, droite, Videoformat, Audioformat : String;

2 Utilisation dans le programme

// Audio et Sous-titres si autorisé

AudioFlag := 0;
SoustitresFlag := 0;

Repeat
Balise := Lecture(Line, '<', '>');
Delete(Line, 1, pos('<', Line) + Length(Balise) - 2);
Extrait := Lecture(Line, '>', '<');
Delete(Line, 1, pos('>', Line) + Length(Extrait) - 2);
If(findInfo('>', '<', Extrait, '0') = 'Audio :') Then
Begin
// [Audio] trouvé
AudioFlag := 1;
SoustitresFlag := 0;
End;
If(findInfo('>', '<', Extrait, '0') = 'Sous-titres :') Then
Begin
// [Sous-titres] trouvé
SoustitresFlag := 1;
AudioFlag := 0;
End;
value := findInfo('" title="', '">', Balise, '0');
If(findInfo('" title="', '">', Balise, '0') <> '') Then
Begin
If(AudioFlag = 1) Then
Begin
Languages := Languages + value + ', ';
End;
If(SoustitresFlag = 1) Then
Begin
Subtitles := Subtitles + value + ', ';
End;
End;
Until(Balise = '</p>');

Delete(Languages, Length(Languages) - 1, 2);
Delete(Subtitles, Length(Subtitles) - 1, 2);

HTMLDecode(Languages);
HTMLDecode(Subtitles);

if CanSetField(fieldLanguages) And (Languages <> '') then
begin
SetField(fieldLanguages, formatTitre(Languages,GetOption('Casse Choisie')));
end;
if CanSetField(fieldSubtitles) And (Subtitles <> '')then
begin
SetField(fieldSubtitles, formatTitre(Subtitles,GetOption('Casse Choisie')));
end;

3 Exemple de résultat non copiable par copié-collé:

Franã§ais, Nã(symbole copyright)erlandais

Merci de ton aide.
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

Post by Raoul_Volfoni »

Salut player_one

Tu n'as pas besoin de faire de HTMLDecode vu qu'il n'y a rien à décoder :p ... ;)
ex sur le site :

Code: Select all

<div alt="Français" class="language normal" title="Français">FR</div><div alt="Anglais" class="language normal" title="Anglais">EN</div>
ex de ton code :

Code: Select all

value := findInfo('" title="', '">', Balise, '0');
donc tu récupères bien Français et Anglais sans caractères à décoder : " title="Français"> et " title="Anglais">

Ton problème doit se situer ailleurs.
Le charset de la page des fiches est en UTF8

Code: Select all

<meta http-equiv="content-type" content="text/html;charset=utf-8" />
... Alors que la page d'accueil est en iso-8859-1 ... :/ ... bref
Il faudrait utiliser la fonction UTF8Decode(Value: string): string; sur ta chaine Line, Balise ou bien Value ... du genre :

Code: Select all

value := UTF8Decode(findInfo('" title="', '">', Balise, '0'));
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

En effet, c'est de l'encodage UTF8 et non de l'encodage HTML ;)

UTF8Decode donc.

HTMLDecode c'est pour les trucs genre "& acute;" etc.

Et pour retirer tous les tags HTML du type <div ...> c'est plutôt HTMLRemoveTags
player_one
Posts: 5
Joined: 2012-01-12 11:46:09

Post by player_one »

Bonjour,

Merci de ton soutien.

Gulp...

J'ai remplacé mes HTMLDecode par des UTF8Decode, j'ai supprimé les HTMLRemoveTags pas nécessaires et celà ne change malheureusement rien et ne semble provoquer aucune erreur. Quelles autres possibilités pourrais-je envisager?

Si je bidouille assez bien en programmation (UNIX et ses outils, Assembleur, C, Basics divers) et n'ai pas trop de difficultés avec Pascal, j'avoue ne pas m'y retrouver dans ces normes que tu sembles maîtriser.

Encore merci.
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

Post by Raoul_Volfoni »

player_one wrote:J'ai remplacé mes HTMLDecode par des UTF8Decode, j'ai supprimé les HTMLRemoveTags pas nécessaires et celà ne change malheureusement rien et ne semble provoquer aucune erreur. Quelles autres possibilités pourrais-je envisager?
Tu as essayé le UTF8Decode sur la valeur Value comme je l'ai ennoncé plus haut et ça ne corrige pas ton problème de caractère ? ... :/ ... humm ... bizarre

Upload ton fichier *.ifs en l'état sur un serveur quelconque, histoire qu'on puisse jeter un oeil.
player_one wrote:Si je bidouille assez bien en programmation (UNIX et ses outils, Assembleur, C, Basics divers) et n'ai pas trop de difficultés avec Pascal, j'avoue ne pas m'y retrouver dans ces normes que tu sembles maîtriser.
Tu dois t'adresser à antp là, parce que moi je maîtrise rien du tout ... :D
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Pour l'UTF8, le mieux serait de faire le UTF8Decode sur l'ensemble de la page récupérée (issue de GetPage/PostPage donc), comme ça tu ne dois plus le faire sur chaque variable traitée.
Sinon en effet il faudrait un exemple précis de ce qui ne fonctionne pas.
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

Post by Raoul_Volfoni »

antp wrote:Pour l'UTF8, le mieux serait de faire le UTF8Decode sur l'ensemble de la page récupérée (issue de GetPage/PostPage donc), comme ça tu ne dois plus le faire sur chaque variable traitée.
Perso, j'évite de traiter toute une page car j'ai remarqué que ça avait tendance à sérieusement ralentir voir coincer, planter tout le process. Mais bon, c'est peut être dû a mes petites configs matériel sur lesquelles AMC tourne.
player_one
Posts: 5
Joined: 2012-01-12 11:46:09

Post by player_one »

Voici la partie que je n'ai pas modifiée (sauf HTMLDecode --> UTF8Decode)

C'est la partie qui prépare le "Tree" de sélection.

//------------------------------------------------------------------------------
// CREATION DE LA LISTE DE RESULTAT
//------------------------------------------------------------------------------

procedure afficheResultat(title : String);
var
StartPos: Integer;
couple, titre, adresse : String;
begin

if (GetOption('Type de Lancement') = 0) or (GetOption('Type de Lancement') = 1) then
begin
PickTreeClear;
PickTreeAdd('Films trouvés pour ' + title + ' :', '');
for i:=0 to listeResultat.Count-1 do
begin
couple := listeResultat.GetString(i);
titre := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(titre)+1);
UTF8Decode(titre);
adresse := copy(couple,0,length(couple));
delete(couple, 1, length(adresse)+1);
PickTreeAdd(titre, adresse);
end;

if listeResultat.Count = 1 then
begin
recupInfo(adresse);
exit;
end;

begin
if PickTreeExec(Address)=true then
begin
recupInfo(Address);
end;
end;
end else if (GetOption('Type de Lancement') = 2) then
begin
if listeResultat.Count = 1 then
begin
couple := listeResultat.GetString(0);
titre := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(titre)+1);
UTF8Decode(titre);

adresse := copy(couple,0,length(couple));
delete(couple, 1, length(adresse)+1);
recupInfo(adresse);
exit;
end else
begin
trouveTitle(title);
end;
end;
end;

En résultat de la requête [pere noel] choisie pour son tréma sur le e de noël mais que je n'ai pas écrit, j'obtiens un affichage codé de l'accentuation française.
Malheureusement je ne puis pas faire de copié-coler sur le résultat affiché du "Tree".

Je veux bien communiquer mon travail puisque "open source", mais il n'est pas encore complètement achevé et j'aimerais l'optimaliser davantage.
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

Post by Raoul_Volfoni »

player_one wrote:Je veux bien communiquer mon travail puisque "open source", mais il n'est pas encore complètement achevé et j'aimerais l'optimaliser davantage.
Un peu galère de travailler sur un bout de code sans pouvoir l'exécuter, mais bon ... Vite fait, ce que je vois, c'est que t'as pas fait comme je disais :p, l'écriture de la fonction n'est pas bonne ... Exemple

Avec ce code

Code: Select all

program UTF8;
var
  Titre : string;
begin
Titre :='Français';
UTF8Decode(Titre);
Showmessage(Titre);
end.
Showmessage affichera "Français" alors qu'avec ce code

Code: Select all

program UTF8;
var
  Titre : string;
begin
Titre :='Français';
Titre := UTF8Decode(Titre);
Showmessage(Titre);
end.
Showmessage affichera "Français"

Donc ton UTF8Decode(titre); pas bon ;)
Soit tu fais un

Code: Select all

titre := UTF8Decode(titre);
soit directement

Code: Select all

titre := UTF8Decode(copy(couple,0,pos('|',couple)-1));
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Ah oui mince ça en effet j'avais pas précisé que UTF8Decode renvoie la valeur traitée alors que HTMLDecode modifie la variable (je sais, ça paraît pas logique... et ça ne l'est pas :hihi: )

Le détail des fonctions se trouve dans l'aide (infos techniques -> scripts, ou quelque chose du genre)
player_one
Posts: 5
Joined: 2012-01-12 11:46:09

Post by player_one »

@ Raoul_Volfoni

Bingo!

Merci pour l'effort et félicitations pour le résultat.

Dans ta première intervention je n'avais pas relevé qu'UTF8Decode fonctionne comme une fonction et pas comme une procédure. Ce n'était pas marqué sur son front! Mea culpa et encore bravo pour ta clairvoyance, ta perspicacité. Dans les scripts que j'ai visités cette erreur semble assez répandue.

Je fais un break d'une vingtaine de jours, et je reviens vous visiter.

Merci aussi à antp pour l'attention et son invention qui a mis de l'ordre dans ma vidéothèque....
Post Reply