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

Langage PHP Discussion :

Que fait la fonction htmlentities ?


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Que fait la fonction htmlentities ?
    Salut!

    Je me demande ce que fais cette fonction! Je l'applique à du texte et la fonction se contente de convertir les caractères accentués en caractères html. Par contre, et c'est le gros problème, il ne change pas les symboles du genre €.

    Que dois-je faire pour y remédier s'il vous plait?

    J'avais pourtant lu que cette fonction convertissait ce qui n'était pas en iso-XXXX-1 (je ne me souviens plus de la valeur de XXXX, désolé).

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut Réponses
    Bonjour, pourquoi tu veus à tout pris utiliser cette fonction ?

    C'est pour un Formulaire ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Oui et non
    Oui, c'est en effet un formulaire. J'utilise cette fonction parce qu'elle m'a semblé appropriée.

    Je veux que le texte reçu soit compatible xhtml strict

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Salut !
    Cette fonction convertit tous les caractères éligibles en entités HTML

    Si tu veux la doc en français : http://fr.php.net/htmlentities

    Sinon pour convertir les symboles du genre € tu peux utiliser ce qu'on apelle des regex ! Si tu ne connais pas je t'invite à lire une doc dessus...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Heu...
    htmlentities est identique à la fonction htmlspecialchars(), sauf que tous les caractères qui ont des équivalents en entités HTML sont effectivement traduits.
    Pourtant d'après ce texte, le € dont l'équivalent est € devrait être remplacé...

    Je pense aussi que c'est moins coûteux d'utiliser str_remplace qu'un truc à base d'expressions régulières étant donné que ce que je veux remplacer est constant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Citation Envoyé par Ravaka
    Pourtant d'après ce texte, le € dont l'équivalent est € devrait être remplacé...
    Ben apparament T_T :/ ... Sinon moi j'utilise preg_replace... Pour transformer certain caractères en c'que je veux (ou pour faire du bbcode que je transorme en xhtml)... Mais je ne me suis jamais posé la question pour le symbole €...

  7. #7
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    si tu regardes la doc officielle PHP, la fonction htmlentities traite par défaut le charset ISO-8859-1

    or le symbole euro est dans le charset ISO-8859-15

    la solution est donc d'utiliser le bon charset dans les paramètres de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maChaine=htmlentities($maChaine,ENT_QUOTES,"ISO-8859-15");

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Heu...
    J'ai essayé, et en changeant l'encodage... l'euro ne veut pas se faire convertir

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Hum...
    J'ai essayé de traiter les données de formulaires avec la fonction htmlentities2($s) que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function htmlentities2($s){
    return str_replace('€','€',htmlentities($s,ENT_QUOTES,"ISO-8859-15"));
    }
    et ça marche pas, le symbole € refuse de se faire remplacer!

  10. #10
    Membre éprouvé
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Par défaut
    verifie que ton editeur de texte enrigistre bien en ISO-8859-15 et non en ISO-8859-1 ou en UTF-8, pour ça tu peux mettre très simplement le symbole € dans du code HTML sans le € et voir comment il s'affiche, s'il s'affiche mal il faut que tu enregistre ton fichier en ISO-8859-15.
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Heu...
    Le problème, c'est que l'éditeur en question peut être n'importe quel navigateur Web , je ne peux donc avoir aucun controle dessus.

  12. #12
    Membre éprouvé
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Par défaut
    Non je te parle de l'éditeur avec lequel tu edite ton code php, je ne te parle pas de tes formulaires, qui eux recupererons les données entrées dans l'encodage specifié par ta balise meta enctype.

    Verifie que ton editeur de texte (notepad++, dremweaver, kate, emacs, peu importe) enregistre bien en ISO-8859-15
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut Alors...
    J'ai enregistré le fichier contenant htmlentities2 en iso-8859-15 et j'ai ajouté l'entype dans le formulaire... Mais rien n'a changé...

    J'ai toujours les € qui ne veulent pas se faire convertir! Je comprends pas! Dire que je galère aussi côté session parce qu'elle refuse d'utiliser la BDD... enfin, c'est une autre histoire mais ce sont toujours des ennuis.

  14. #14
    Membre éprouvé
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Par défaut
    essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
    <title>Document sans titre</title>
    </head>
    <body>
    <?php
    echo htmlentities("€", ENT_QUOTES, "ISO-8859-15");
    ?>
    </body>
    </html>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
    <title>Document sans titre</title>
    </head>
     
    <body>
    <?php
    echo str_replace("€", "&euro;", "€");
    ?>
    </body>
    </html>
    et verifie que ta source est bien dans les deux cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
    <title>Document sans titre</title>
    </head>
     
    <body>
    &euro;
    </body>
    </html>
    Si ce n'est pas le cas, tu ne peux pas faire grand chose, si ce n'est utiliser le charset UTF-8 :s
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut J'ai essayé
    Dans le premier cas j'obtiens: "€"
    Et le code source contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <body>
    &acirc;‚&not;</body>
    Je trouve ce genre de réponse assez magique!

    Enfin bon, l'essentiel est que ça marche sur Free... Je vais essayer!

    Ah, je viens de tester enregistré au format ISO-XXX-15 apparemment ça marche. Je vais voir ce que ça donne en jouant avec les meta...

    ça ne marche pas

  16. #16
    Membre éprouvé
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Par défaut
    si tu as ce genre de résultat c'est que ton serveur te renvoi des caractères unicodes, codés sur deux octets au lieu d'un, ce qui explique que tu ai deux caractères. Par contre, je ne sait pas comment y remedier, désolé
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Par défaut ^^
    Merci en tout cas!

    C'est vraiment dommage que htmlentities ne marche pas comme je le veuille...

Discussions similaires

  1. Que fait cette fonction ?
    Par Invité(e) dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/05/2008, 20h40
  2. que fait cette fonction ?
    Par nitteo dans le forum C#
    Réponses: 21
    Dernier message: 31/01/2008, 17h30
  3. Que fait cette fonction ?
    Par masterix59 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/11/2007, 21h13
  4. que fait cette fonction ?
    Par salseropom dans le forum C
    Réponses: 21
    Dernier message: 12/10/2006, 18h33
  5. [Conception] Que fait ma fonction ?
    Par Tr@nkill dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/04/2006, 15h03

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