IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[Win32][D7] Convertir caractères spéciaux en code URL (HTML) [FAQ]


Sujet :

Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut [Win32][D7] Convertir caractères spéciaux en code URL (HTML)
    Salut,

    Afin de pouvoir charger des pages HTML dont le lien comprend des caractères spéciaux (accents, espace, etc...), je souhaiterais pouvoir convertir ces caractères en caractères conformes aux liens URL.

    Exemple : convertir 'é' en '%e9'

    Existe-t-il des fonctions toutes faites ?
    Ou faut-il que je récupère toute la liste des caractères spéciaux afin de faire ma propre fonction (mais cela fait quand meme 155 caractères à traiter) ?

    Merci d'avance
    CV :
    - LinkedIn
    - Viadeo

  2. #2
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut car HTML


    J'ait ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    unit UnitConvertCar;
    interface
    Function ConvertCarHTML(C : Char) : String;
    Function ConvertTexteHTML(S : String) : String;
    implementation
     
    Function ConvertCarHTML(C : Char) : String;
    Var
      S  : String;
    Begin
       Case C Of
        'À' : S := 'À';
        'Á' : S := 'Á';
        'Â' : S := 'Â';
        'Ã' : S := 'Ã';
        'Ä' : S := 'Ä';
        'Å' : S := 'Å';
        'Æ' : S := '&Aelig;';
        'à' : S := 'à';
        'á' : S := 'á';
        'â' : S := 'â';
        'ã' : S := 'ã';
        'ä' : S := 'ä';
        'å' : S := 'å';
        'æ' : S := 'æ';
        'Ç' : S := 'Ç';
        'ç' : S := 'ç';
        'Ð' : S := 'Ð';
        'ð' : S := 'ð';
        'È' : S := 'È';
        'É' : S := 'É';
        'Ê' : S := 'Ê';
        'Ë' : S := 'Ë';
        'è' : S := 'è';
        'é' : S := 'é';
        'ê' : S := 'ê';
        'ë' : S := 'ë';
        'Ì' : S := 'Ì';
        'Í' : S := 'Í';
        'Î' : S := 'Î';
        'Ï' : S := 'Ï';
        'ì' : S := 'ì';
        'í' : S := 'í';
        'î' : S := 'î';
        'ï' : S := 'ï';
        'Ñ' : S := 'Ñ';
        'ñ' : S := 'ñ';
        'Ò' : S := 'Ò';
        'Ó' : S := 'Ó';
        'Ô' : S := 'Ô';
        'Õ' : S := 'Õ';
        'Ö' : S := 'Ö';
        'Ø' : S := 'Ø';
        'Œ' : S := 'Œ';
        'ò' : S := 'ò';
        'ó' : S := 'ó';
        'ô' : S := 'ô';
        'õ' : S := 'õ';
        'ö' : S := 'ö';
        'ø' : S := 'ø';
        'œ' : S := 'œ';
        'Ù' : S := 'Ù';
        'Ú' : S := 'Ú';
        'Û' : S := 'Û';
        'Ü' : S := 'Ü';
        'ù' : S := 'ù';
        'ú' : S := 'ú';
        'û' : S := 'û';
        'ü' : S := 'ü';
        'Ý' : S := 'Ý';
        'Ÿ' : S := 'Ÿ';
        'ý' : S := 'ý';
        'ÿ' : S := 'ÿ';
        '¢' : S := '¢';
        '£' : S := '£';
        '¥' : S := '¥';
        '©' : S := '©';
        '®' : S := '®';
        'ª' : S := 'ª';
        'º' : S := 'º';
        '¹' : S := '¹';
        '²' : S := '²';
        '³' : S := '³';
        '¼' : S := '¼';
        '½' : S := '½';
        '¾' : S := '¾';
        '÷' : S := '÷';
        '×' : S := '×';
        '>' : S := '>';
        '<' : S := '&lt;';
        '±' : S := '&plusmn;';
        '¿' : S := '&iquest;';
        '¡' : S := '&iexcl;';
        '¤' : S := '&curren;';
        '¦' : S := '&brvbar;';
        '§' : S := '&sect;';
        '¨' : S := '&uml;';
        '«' : S := '&laquo;';
        '»' : S := '&raquo;';
        '¬' : S := '&not;';
        '´' : S := '&acute;';
        'µ' : S := '&micro;';
        '¶' : S := '&para;';
        '·' : S := '&middot;';
        '¸' : S := '&cedil;';
        'þ' : S := '&thorn;';
        'ß' : S := '&szlig;';
        Else S := C;
      End;
      Result := S;
    End;
    Function ConvertTexteHTML(S : String) : String;
    Var
       I      : Integer;
       S1, S2 : String;
    Begin
       If Length(S) = 0 Then
        begin
           Result := '';
           Exit;
        end;
       S2 := '';
       S1 := S;
       For I := 1 To Length(S) Do S2 := S2 + ConvertCarHTML(S1[I]);
       Result := S2;
    End;
    end.
    Si ça peut t'aider...
    Rien n'est moins sur que l'incertain : Pierre DAC

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Merci
    Mais cela ne fonctionne pas pour les adresses http...

    Il faut avoir les caractères spéciaux sous la forme %xx pour que cela fonctionne
    CV :
    - LinkedIn
    - Viadeo

  4. #4
    Membre du Club Avatar de lassmust
    Inscrit en
    Avril 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Voici une fonction qui marche a tout les coups
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     function HTTPEncode(const AStr: string): string;
    const
      NoConversion = ['A'..'Z', 'a'..'z', '*', '@', '.', '_', '-'];
    var
      Sp, Rp: PChar;
    begin
      SetLength(Result, Length(AStr) * 3);
      Sp := PChar(AStr);
      Rp := PChar(Result);
     
      while Sp^ <> #0 do
      begin
        if Sp^ in NoConversion then
          Rp^ := Sp^
        else 
        if Sp^ = ' ' then
          Rp^ := '+'
        else
        begin
          FormatBuf(Rp^, 3, '%%%.2x', 6, [Ord(Sp^)]);
          Inc(Rp, 2);
        end;
        Inc(Rp);
        Inc(Sp);
      end;
     
      SetLength(Result, Rp - PChar(Result));
    end;
    le monde appartient a ceux qui se léve tôt

  5. #5
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Merci

    Je n'avais pas vu le rapport entre le code ASCII et l'équivalent hexa préfixé du '%'

    Une petite question sur ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         if Sp^ = ' ' then
          Rp^ := '+'
    Je ne saisie pas trop à quoi sert ceci...
    Pourquoi considérer le caractère ' ' différemment des autres ?

    Merci

    PS: je me suis permi d'ajouter les balises Code, en effet le code est beaucoup plus lisible maintenant.
    CV :
    - LinkedIn
    - Viadeo

  6. #6
    Membre du Club Avatar de lassmust
    Inscrit en
    Avril 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    c'est simple l'espace en http et remplacer par '+'
    le monde appartient a ceux qui se léve tôt

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    à mon avis les deux fonctions ont leur place dans la FAQ
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  8. #8
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Citation Envoyé par lassmust
    c'est simple l'espace en http et remplacer par '+'
    Ah ok, ca marche aussi avec %20

    J'ai fais quelques petites modifs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function HTTPEncode(const AStr: string): string;
    const
      NoConversion = ['A'..'Z', 'a'..'z', '0'..'9',':','*', '@', '.', '_', '-','/','\','?'];
    var
      Sp, Rp: PChar;
    begin
      SetLength(Result, Length(AStr) * 3);
      Sp := PChar(AStr);
      Rp := PChar(Result);
     
      while Sp^ <> #0 do
      begin
        if Sp^ in NoConversion then
          Rp^ := Sp^
        else
        begin
          FormatBuf(Rp^, 3, '%%%.2x', 6, [Ord(Sp^)]);
          Inc(Rp, 2);
        end;
        Inc(Rp);
        Inc(Sp);
      end;
     
      SetLength(Result, Rp - PChar(Result));
    end;
    Citation Envoyé par denokan
    à mon avis les deux fonctions ont leur place dans la FAQ
    La première méthode y est déjà
    http://delphi.developpez.com/faq/?pa...irhtmlspeciaux

    Mais on peut proposer la deuxième, en effet.

    Merci à tous
    CV :
    - LinkedIn
    - Viadeo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/10/2007, 11h49
  2. récupérer caractères spéciaux dans l'url
    Par thewaterkidny dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/08/2007, 09h58
  3. les caractères spéciaux dans l'url, c'est mal !
    Par _gargamel_ dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/05/2007, 16h03
  4. Convertir caractères spéciaux
    Par jadorelescss38 dans le forum ASP
    Réponses: 5
    Dernier message: 02/05/2007, 15h41
  5. Réponses: 4
    Dernier message: 28/01/2006, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo