Salut soulsnake,
Je rencontre un problème avec la fonction HTMLDecode qui, malgré sa mise à jour dans la version 4.2.0 [BETA] du 13/10/13, retourne des valeurs non interprétées. J'ai constaté cela sur le caractère &# 8217;
Ex :
Code: Select all
program NewScript;
var
Value :string;
begin
Value := 'L&# 8217;univers de la mythique saga est ici &# 233;tendu et l&# 8217;ambiance est moins sombre que dans les volets pr&# 233;c&# 233;dents';
HTMLDecode(Value);
ShowMemo(Value);
end.
(Dans Value il faut bien entendu retirer les espaces entre &# et le chiffre)
En poussant les recherches, je me suis rendu compte que le même caractère encodé en mode texte (& rsquo;) est bien décodé par la fonction HTMLDecode.
j'ai donc fait un petit script pour récupérer tous les caractères spéciaux de
cette page et voir ce qu'un HTMLDecode donne sur un même caractère encodé en texte ou bien numériquement.
Code: Select all
program NewScript;
const
CR = #13#10;
Tab = #9;
Esp = ' ';
Sep = '|';
uses
StringUtils1;
var
URL, Line, Value, Value2 : string;
//------Fonction Extract_Infos--------------------------------------------------
function Extract_Infos(Info : string): string;
var
Temp, Txt, Num, Car, Des, Txt2, Num2 : string;
begin
Delete(Info, 1, Pos('</tr>', Info));
While Pos('</tr>', Info) > 0 do
begin
Car := TextBetween(Info, '<tr><td>', '</td>'); // caractère
Txt := TextBetween(Info, '<td>&', '</td>'); // code texte
if length('&'+Txt) >= 8 then
Txt2 := Txt+Tab
else
Txt2 := Txt+Tab+Tab;
Num := TextBetween(Info, '<td>&#', '</td>'); // code numérique
if length('&#'+Num) >= 8 then
Num2 := Num+Tab
else
Num2 := Num+Tab+Tab;
Delete(Info, 1, Pos('<td>&#', Info));
Des := UTF8Decode(TextBetween(Info, '<td>', '</td>')); // description du caractère
HTMLRemoveTags(Des);
if Des <> ' ' then
Des := '{ '+Des+' }';
Temp := Temp+'( '+Car+' )'+Tab+'&'+Txt2+'='+Tab+'[ '+'&'+Txt+' ]'+Tab+Sep+Tab+'&#'+Num2+'='+Tab+'[ '+'&#'+Num+' ]'+Tab+Des+CR;
Delete(Info, 1, Pos('</tr>', Info));
end;
result := Temp;
end;
//------Programme Principal-----------------------------------------------------
begin
URL := 'http://alexandre.alapetite.fr/doc-alex/alx_special.html';
Line := GetPage(URL);
Value2 := TextBetween(Line, UTF8Encode('<h2 id="generaux">Caractères généraux</h2>'), '</table>');
Value := '[ Caractères généraux ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, '<h2 id="monnaies">Monnaies</h2>', '</table>');
Value := Value+CR+'[ Monnaies ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, UTF8Encode('<h2 id="accents">Caractères alphabétiques accentués et spéciaux</h2>'), '</table>');
Value := Value+CR+'[ Caractères alphabétiques accentués et spéciaux ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, '<h2 id="grec">Alphabet Grec</h2>', '</table>');
Value := Value+CR+'[ Alphabet Grec ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, ('<h2 id="sciences">Sciences</h2>'), '</table>');
Value := Value+CR+'[ Sciences ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, UTF8Encode('<caption>Reconnus sous <abbr>IE</abbr>6.0+ avec une police unicode</caption>'), '</table>');
Value := Value+CR+'[ Divers caractères reconnus sous IE6.0+ avec une police unicode ]'+CR+CR+Extract_Infos(Value2);
Value2 := TextBetween(Line, UTF8Encode('<caption>Reconnus sous <abbr>IE</abbr>6.1+ avec une police unicode</caption>'), '</table>');
Value := Value+CR+'[ Divers caractères reconnus sous IE6.1+ avec une police unicode ]'+CR+CR+Extract_Infos(Value2);
//ShowMemo(Value);
HTMLDecode(Value);
ShowMemo(Value);
end.
Beaucoup de caractères ne sont pas décodés en mode numérique alors qu'ils le sont en mode texte et certains caractères n'ont pas le même décodage selon le mode dans lesquels ils apparaissent.
Ex :
& hellip; = &# 8230; = ...
Mais alors que :
HTMLDecode sur & hellip; renvoie bien ...
HTMLDecode sur &# 8230; renvoie &
C'est normal ou y a t'il moyen de faire quelque chose ?