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 :

Affichage des caractères HTML


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut Affichage des caractères HTML
    Bonjour
    Je gère le site de ma chorale. Ce site est bâti avec des frames.
    En local, je suis en PHP 5.2.0 et mysql 5.0.22
    Chez l'hébergeur (pages perso de Free) c'est PHP 5.1.3RC4-dev et mysql 5.0.77

    J’ai un fichier php qui utilise la fonction echo pour afficher du texte html. Je copie un bout de texte dans un fichier .docx. J’ai essayé 2 méthodes :
    1 - Je colle le texte tel quel dans mon php
    2 - Je convertis le texte en HTML avec la formule*:
    $texte_html = htmlspecialchars(htmlentities($_POST['a_convertir']));
    puis je le colle dans mon php.
    Quelle que soit la méthode employée, le texte qui s’affiche dans la page web affiche les caractères html.
    Pourriez-vous m’aider à régler ce problème, svp*?
    Cordialement

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 719
    Par défaut
    commencez déjà avec un exemple tout simple comme cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <strong>html de base</strong>
    <?php
     
    echo "bonjour, <strong>html généré en php</strong>";
    qu'est ce que vous obtenez avec cela ?
    vous pouvez nous donner l'adresse de cette page de test ?

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html (suite)
    Bonjour et merci de votre réponse
    Il y a quelque chose qui m'échappe : dans le mail que j'ai reçu, le code de l'exemple contient plus de lignes que ci-dessus :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div class="bbcode_container">
    	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
    	<td style="border: 0; padding: 0; text-align: left">Code  :</td>
    	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
    	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
    	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><strong>html de base</strong>
    <span style="color: black;"><span style="color: #0080ff;"><?php</span></span>
    &nbsp;
    <span style="color: black;"><span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">"bonjour, <strong>html g&eacute;n&eacute;r&eacute; en php</strong>"</span>;</span></pre></td></tr></table></pre>
    </div>

    J'ai créé un fichier php avec tout ce code. En local, sur mon ordi, ça a bien marché, j'ai eu cet affichage :

    Code : 	Sélectionner tout - Visualiser dans une fenêtre à part
    
    1
    2
    3
    4
    	
    
    html de base
    
     
    echo "bonjour, html généré en php";
    
    ?>
    Dans la page retournée par le test, les numéros de page sont en face des lignes de texte.

    J'ai envoyé le fichier chez l'hébergeur et là, j'ai eu ce résultat :

    Parse error: syntax error, unexpected '<' in /mnt/153/sda/0/1/ens.voc.impressions/test_forum.php on line 3
    Outre l'erreur retournée, vous avez sur la ligne ci-dessus l'adresse du fichier de test.


    Après avoir vu le code réduit figurant ci-dessus, je l'ai mis en remplacement dans mon php et j'ai maintenant ce résultat :
    html de base echo "bonjour, html généré en php"; ?>
    Est-ce que je suis assez clair ?
    Cordialement

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html
    Bonjour
    Je me permets de venir aux nouvelles : j'ai répondu le 12/10 et il ne se passe plus rien. est-ce normal ?
    Cordialement.

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 719
    Par défaut
    je ne saisi pas le rapport entre les tests que vous nous montrez et leurs résultats. et je ne vois pas où il y a du code html qui s'affiche et je n'en vois pas sur votre site.

    donc comme je ne comprends pas tout ça, je passe mon tour.

  6. #6
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 496
    Par défaut
    Bonjour,

    Nous ne pouvons pas accéder au fichier de test indiqué dans ton précédent message car /mnt/153/sda/0/1/ens.voc.impressions/test_forum.php est le chemin physique du fichier sur ton serveur et pas une URL accessible en ligne.

    Il ne faut pas utiliser les 2 fonctions htmlspecialchars et htmlentities sur la même donnée, il faut utiliser une seule de ces 2 fonctions.
    Utilise uniquement htmlentities si tu ne travailles pas en utf-8, ou uniquement htmlspecialchars si les pages html sont en utf-8.


    Si tu vois le résultat "html généré en php" dans le navigateur, c'est surement l'encodage du fichier source qui ne correspond pas à l'encodage html.
    Au vu de ta version PHP, je suppose que tu utilise le charset iso-8859-1.

    Quel est l'éditeur de texte que tu utilises pour modifier ou créer tes fichiers php ?

    Par exemple avec Notepad++, tu peux ouvrir ton fichier de test, cliquer sur le menu "Encodage" puis "Convertir en ANSI" et enregistrer le fichier.
    Les accents devraient alors s'afficher correctement sur le texte "html généré en php".

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci de ta réponse.

    J’ai plusieurs choses à dire mais je préfère me limiter à un point pour l’instant.

    Dans le petit script utilitaire dans lequel je convertis des caractères autres en caractères html, je suis en iso-8859-1. J’ai donc, suivant ton conseil, supprimé la fonction htmlspecialchars pour ne laisser que htmlentities. Après cela, la conversion de «*caractères*» me retourne «*caractères*».
    J’ai remis la combinaison des 2 fonctions et là, la conversion retourne bien «*carat&egrave;res*».
    Je veux bien suivre ton conseil mais mon essai n'est pas concluant.
    Peux-tu m’éclairer ?
    Merci.

  8. #8
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 496
    Par défaut
    Si tu appliques htmlentities sur le caractères "è", celui-ci sera converti en entité html sous la forme "&egrave;" afin d'afficher correctement ce caractères.
    Idem pour le caractères "&" qui sera converti en entité html "&amp".

    Si tu appliques une seconde fois htmlentities ou htmlspecialchars sur l'entité "&egrave;", celle-ci sera alors transforme en "&amp;egrave;" ce qui n'affiche pas le bon résultat.

    fichier de test encodé en iso-8859-1 :
    Code html : 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
    <?php
     
    ini_set('default_charset', 'ISO-8859-1');
    header('Content-Type: text/html; charset=iso-8859-1');
     
    $text = "J'aime les caractères spéciaux tel que &";
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="ISO-8859-1">
        <title>Test ISO</title>
    </head>
    <body>
     
    <?= htmlentities($text); ?>
    <br>
    <?= htmlspecialchars(htmlentities($text)); ?>
     
    <hr>
     
    <pre>
        <?php var_dump(htmlentities($text)); ?>
        <br>
        <?php var_dump(htmlspecialchars(htmlentities($text))); ?>
    </pre>
     
    </body>
    </html>

    Le premier affichage avec htmlentities affiche le texte "J'aime les caractères spéciaux tel que &" correctement, regarder le code source de la page ou le var_dump pour voir les entités.
    Le deuxième affichage avec htmlspecialchars + htmlentities affiche le texte "J'aime les caract&egrave;res sp&eacute;ciaux tel que &amp;"

  9. #9
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci
    J’ai créé le fichier test que tu m’as envoyé et je l’ai lancé en local voilà ce qui s’affiche :

    string(69) "J'aime les caractères spéciaux tel que &"
    string(89) "J'aime les caract&Atilde;&uml;res sp&Atilde;&copy;ciaux tel que &amp;"

    Puis j’ai uploadé ce fichier chez l’hébergeur Free et voilà ce qui s’y affiche :

    J'aime les caractères spéciaux tel que &
    J'aime les caract&Atilde;&uml;res sp&Atilde;&copy;ciaux tel que &amp;
    //ici il y a bien la barre de la balise <BR> qui ne s'affiche pas ici
    string(69) "J'aime les caractères spéciaux tel que &"
    string(89) "J'aime les caract&Atilde;&uml;res sp&Atilde;&copy;ciaux tel que &amp;"

    Je ne suis pas tiré d’affaire !! J'espère que tu peux encore m'aider.
    Merci beaucoup
    Cordialement

  10. #10
    Invité
    Invité(e)
    Par défaut
    Le problème est lié à votre éditeur qui enregistre le fichier au format utf-8

  11. #11
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci de votre réponse.
    Je n’avais pas vu qu’il y avait des fichiers dans cette réponse, et j’ai préparé la réponse ci-dessous. Maintenant que j’ai vu les fichiers dans votre réponse, je ne sais pas les exploiter et je ne sais pas non plus comment joindre les deux scripts dont je vous parle ci-dessous. Désolé.
    J’ai un script utilitaire qui contient un formulaire*: j’y saisis un texte (provenant en l’occurrence d’un fichier .docx) et je clique sur un bouton qui convertit le texte en caractères html avec la fonction htmlentities (remarque d’une précédente réponse (Pytet) prise en compte*: dans ce script, je suis en charset=*‘iso-8859-1*‘ (balise meta).
    Après conversion, le texte s’affiche tout-fait-correctement. Par exemple*:
    «*La musique sacrée d’Europe de l’Est des XIXe et XXe siècles est imprégnée d’une richesse culturelle et musicologique unique, influencée par une variété de traditions et de styles musicaux*: les chants liturgiques orthodoxes russes, les traditions musicales catholiques telles que le plain-chant et la polyphonie, le folklore et la musique populaire, et les différents genres d’écriture musicale occidentale telles que le romantisme, l’impressionnisme et le modernisme.*»
    J’ai un script qui fait une page de présentation d’un concert. Je copie le texte html fait précédemment dans l’utilitaire, dans la variable $présentation de ce second script et lorsque j’affiche la page dans un navigateur, ça donne des caractères html comme cela*:
    «*La musique sacrée d’Europe de l’Est des XIXe et XXe siècles est imprégnée d’une richesse culturelle et musicologique unique, influencée par une variété de traditions et de styles musicaux : les chants liturgiques orthodoxes russes, les traditions musicales catholiques telles que le plain-chant et la polyphonie, le folklore et la musique populaire, et les différents genres d’écriture musicale occidentale telles que le romantisme, l’impressionnisme et le modernisme.».

    Qu’est-ce qui ne va pas*?
    J’utilise Notepad++.
    Merci d’avance
    Cordialement.

  12. #12
    Invité
    Invité(e)
    Par défaut
    La musique sacrée d’Europe de l’Est des XIXe et XXe siècles est imprégnée d’une richesse culturelle et musicologique unique, influencée par une variété de traditions et de styles musicaux : les chants liturgiques orthodoxes russes, les traditions musicales catholiques telles que le plain-chant et la polyphonie, le folklore et la musique populaire, et les différents genres d’écriture musicale occidentale telles que le romantisme, l’impressionnisme et le modernisme
    Justement ce texte est en UTF-8 vous pouvez vérifier dans Notpad++
    Lancer le Notepad++ et changer l'encodage vers ANSI.
    Coller le texte ci-dessus.
    Rechanger l'encodage en UTF-8.

    Le texte va reprendre sa forme originale

    Donc avant de coller le texte dans vos sources PHP vérifie que le Notpad++ est dans le bon encodage car il est configuré par défaut au format UTF8.

    tu peux aussi décoder le texte s'il s'affiche correctement cela signifie qu'il y a bien de l'utf qui a été introduit d'une manière ou autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     htmlentities(utf8_decode($text))

  13. #13
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci
    ça a fonctionné : j'ai obtenu un affichage correct après la conversion en ANSI.
    Mais, j'ai fait plusieurs allers et venues utf-8 / Ansi et ça ne fonctionne plus : même après avoir refait la manip complète : copier le texte dans votre réponse, le coller dans Notepad++, encoder en Ansi et sauvegarder, ça reste bloqué sur le mauvais affichage. Quelque chose doit encore m'échapper.
    Cordialement.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Commencer par refaire le test proposé par Paytet:
    Créer nouveau fichier dans Notpad++
    Fixer l'encodage à ISO-8859-1
    Copier le code de l'exemple et enregistrer

    Vous devriez obtenir un affichage correct.

  15. #15
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci.
    Je n’ai pas créé un nouveau fichier test de Pytet : je l’ai rouvert dans Notepad++ et ai fait une conversion en ANSI et une sauvegarde. L’affichage dans le navigateur est toujours le même :


    string(58) "J'aime les caractères spéciaux tel que &"


    string(70) "J'aime les caract&egrave;res sp&eacute;ciaux tel que &amp;"

    Le texte censé s’afficher au-dessus de la barre (<hr> qui ne s'affiche pas ici mais bien dans mon navigateur) ne s’affiche pas mais le test est probant dans la partie dump: les caractères sont corrects après emploi de la seule fonction htmlentities et incorrects après emploi de la combinaison htmlspecialchars(htmlentities($text).

    J’ai corrigé plusieurs pages du site consacrées à des présentations de concerts passés, qui avaient le même genre de problème de caractères incorrects et c’est bon maintenant sauf pour le CV d’une instrumentiste qui est stocké en BD en utf-8 unicode ci. Les anomalies d’affichage ne sont pas les mêmes :
    Elise Le?onard commence l’orgue a? l’a?ge de huit ans au CRD de Charleville-Me?zie?res dans la classe de Pascale Rouet. Elle poursuit ensuite son cursus musical au CRR de Reims avec J.P. Fetzer puis P. Me?a. Elle obtient son prix d’orgue en 1999 ainsi que les prix d’e?criture, musique de chambre et formation musicale. Apre?s un an d’e?tude aux c&ocirc;te?s de F.H. Houbart, Elise inte?gre le CNSMD de Paris et y suit les cours de M. Bouvard et d’O. Latry. Ses e?tudes sont couronne?es par un diplo?me de formation supe?rieure avec la mention tre?s bien et un prix de basse-continue.

    Néanmoins, je croyais qu’il valait mieux en général utiliser de l’utf-8 plutôt que de l’iso-8859-1.
    Est-ce vrai et dans ce cas quelle est la solution pour un bon affichage de caractères ?
    Cordialement.

  16. #16
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 496
    Par défaut
    Vu ta version PHP et tes premiers messages, j'ai supposé que ton projet était en iso au lieu de utf-8 (ISO-8859-1 est le charset par défaut en PHP 5.2 et ton résultat "html généré en php" correspond à un texte iso dans un fichier encodé en utf-8).

    Depuis PHP 5.4 (2012), le charset par défaut de PHP a été changé de ISO-8859-1 à UTF-8.

    Si tu peux, l'idéal serait en effet de passer tout en utf-8.
    https://j-willette.developpez.com/tu...-site-en-utf8/

  17. #17
    Invité
    Invité(e)
    Par défaut
    Les anomalies d’affichage ne sont pas les mêmes
    Essaie de fournir le reste des paramètres de htmlentities celui de l'encodage de l'entrée et l'autre qui concerne le double encodage pratiquement les caractères & sont transformés en &amps ce qui empêche leur affichage correcte donc il faut le désactiver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = htmlentities( $_POST['a_convertir'], ENT_COMPAT, "UTF-8", false);
    Si tu n'as le quatrième paramètre dans ta version de PHP utilise str_replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $text = htmlentities( $_POST['a_convertir'], ENT_COMPAT, "UTF-8");
    $text = str_replace('&amp;', '&', $text);

    Test sur version 5.2.1
    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
    <?php
     
     $text = ''; 
     if (isset($_POST['a_convertir'])){
        $text = stripslashes($_POST['a_convertir']);  
        $text = htmlentities($text, ENT_COMPAT, "UTF-8");  
    	$text = str_replace('&amp;', '&', $text); 
     }	 
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <title>Test ISO</title>
    	<style>
    	  textarea { width:400px;
    	             height: 200px;
    	  }
    	</style>
    </head>
    <body>
     <?php echo phpversion(); ?> 
     <br> <br>
    <?php echo $text ?>
     <br> <br>
    <?php echo htmlspecialchars($text); ?>
     
    <form method="POST">
    <textarea name="a_convertir"><?php echo $text ?></textarea>
    <br>
    <input type="submit" />
    </form>
    </body>
    </html>
    Dernière modification par Invité ; 07/11/2024 à 15h14.

  18. #18
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci à Pytet et rMist2024

    Plus spécialement pour Pytet
    Je voudrais essayer de passer en utf-8. J’ai lu l’article.
    Je me permets de te soumettre ce que j’ai compris qu’il faut faire*:
    Dans un document html, définir la balise meta à content="text/html; charset=utf-8"
    Chaque fichier doit être enregistré en utf-8 (dans Notepad++, Faire Encodage / Encoder en utf-8)
    A la connexion avec la BD (MYSQL), je crois comprendre qu’il faut préciser l’encodage à la BD avec la fonction*: mysql_set_charset( 'utf8' )*; mais je ne sais pas comment faire.En local, dois-je passer cette commande manuellement à chaque fois que j’ouvre la BD*? Chez l’hébergeur, c’est encore plus flou…
    Pour les caractères html, dans le cas que je vous ai soumis, j’ai dû utiliser la fonction htmlentities.
    Tu m’as écrit dans une de tes réponses qu’en utf-8, il fallait utiliser la fonction htmlspecialchars. Dois-je le faire pour tout texte à écrire dans un document html*?

    Plus spécialement pour rMist2024
    J’ai retenu tes recommandations pour le paramétrage de htmlentities. Pour être sûr de bien comprendre*: définir le paramètre encoding à «*utf-8*» fait que le texte retourné sera encodé en utf-8*?
    J’ai fait tourner le script Test ISO. Par rapport aux instructions
    <?php echo $text ?>
    <br> <br>
    <?php echo htmlspecialchars($text); ?>
    , ça me retourne les 2 textes ci-dessous*et je ne comprends pas la différence entre les 2*:

    La musique sacrée d’Europe de l’Est des XIXe et XXe siècles est imprégnée d’une richesse culturelle et musicologique unique, influencée par une variété de traditions et de styles musicaux*:

    La musique sacrée d’Europe de l’Est des XIXe et XXe siècles est imprégnée d’une richesse culturelle et musicologique unique, influencée par une variété de traditions et de styles musicaux&nbsp;:

    Pour tous les deux*: il semble que ma compréhension de la marche à suivre pour le traitement des caractères ayant des correspondances dans les entités html est encore assez imprécise…
    Merci à tous les deux.
    Bien cordialement.

  19. #19
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 496
    Par défaut
    Si tu peux, le mieux serait de commencer par utiliser une version plus récente de PHP : https://www.php.net/supported-versions.php
    Tu risques néanmoins d'avoir des incompatibilités de code avec une version à jour de PHP, les changements et corrections nécessaires suite à un changement de version peuvent être important en fonction de ton projet.

    Si tu ne peux pas mettre à jour PHP, il faudrait alors modifier la configuration default_charset de PHP afin que celui-ci utilise UTF-8 à la place de ISO-8859-1 par défaut.
    Tu peux définir cette configuration pour le script en cours d'exécution via ini_set mais le mieux étant de le définir de manière globale pour tous les scripts en modifiant cette config dans le fichier de configuration php.ini

    Tous les fichiers sources doivent en effet être enregistrés en UTF-8 sans BOM via ton éditeur (Notepad++ par exemple).

    Dans la balise head des documents html, on peut utiliser la balise meta charset html5 : <meta charset="UTF-8"> (équivalent à <meta http-equiv="content-type" content="text/html; charset=utf-8" />)

    Si tu utilises une bdd, tu dois en effet définir le charset de la connexion juste après avoir effectué la connexion dans le code PHP selon l'API utilisé (PDO, Mysqli ou Mysql).
    Pour rappel, l'API Mysql est obsolète depuis PHP 5.5 et supprimée depuis PHP 7, utiliser PDO ou Mysqli à la place.

    Avec l'API Mysql ou Mysqli (les fonctions mysql_* ou mysqli_*), on utilise la fonction mysql_set_charset ou mysqli_set_charset juste après la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // mysql
    mysql_connect('localhost', 'mysql_user', 'mysql_password');
    mysql_set_charset('utf8');
     
    // mysqli
    $mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
    mysqli_set_charset($mysqli, 'utf8');
    Avec PDO, la charset est défini via un paramètre du DSN. Pour les anciennes versions de PHP (avant 5.3.6), le paramètre charset n'est pas pris en compte et on défini alors celui-ci via une requête initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // pdo
    $pdo = new PDO('mysql:host=localhost;dbname=maBDD;charset=utf8', 'my_user', 'my_password', [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']);
    Enfin, lors de l'affichage de données php dans un document html, oui il faut toujours utiliser htmlspecialchars ou htmlentities pour échapper les caractères réservés en html et ainsi éviter les failles XSS.

  20. #20
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut php html affichage des caractères html suite
    Bonjour et merci pour toutes ces indications.
    Je n’ai pas encore eu le temps de les appliquer mais ça ne va pas tarder.
    Je ne vais pas passer à une version plus récente de php, ce qui risquerait de m’emmener trop loin.
    En local, dans EasyPHP 2,0b1/php5, j’ai un fichier php,ini-dist et un fichier php.ini-recommended. Comment puis-je savoir dans lequel je dois modifier le charset ? Et chez l’hébergeur, ai-je la main pour modifier le charset de php et celui de Mysql ?
    Encore merci.
    Cordialement.

Discussions similaires

  1. Affichage des balises HTML et des photos dans la pop up
    Par youri89 dans le forum IGN API Géoportail
    Réponses: 1
    Dernier message: 04/09/2013, 17h07
  2. affichage des balises html dans une page
    Par lecra dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2010, 13h31
  3. [Smarty] Problème d'affichage des balises HTML
    Par arnogb69 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/08/2008, 12h02
  4. [html PHP] Affichage des résultats à l'horizontal
    Par camzo dans le forum Langage
    Réponses: 13
    Dernier message: 29/12/2006, 18h36
  5. pb affichage des photos incorporées par balises html
    Par laville dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/04/2005, 11h47

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