web-dev-qa-db-fra.com

Comment afficher des caractères spéciaux dans PHP

J'ai vu cette demande plusieurs fois, mais pas avec une bonne résolution. J'ai la chaîne suivante:

$string = "<p>Résumé</p>";

Je veux imprimer ou faire écho à la chaîne, mais la sortie renverra <p>R�sum�</p>. J'essaie donc htmlspecialchars() ou htmlentities() qui affiche &lt;p&gt;R&eacute;sum&eacute;&lt;p&gt; et que le navigateur affiche &lt;p&gt;R&eacute;sum&eacute;&lt;p&gt;. Je le veux, évidemment, pour rendre ceci:

CV

Et j'utilise UTF-8:

header("Content-type: text/html; charset=UTF-8");

Qu'est-ce que j'oublie ici? Pourquoi echo et print génèrent-ils un pour tout caractère spécial? Pour préciser, la chaîne est en réalité un fichier HTML entier stocké dans une base de données. L’application dans le monde réel n’est pas une simple petite ligne.

12
Phil Tune

Après avoir beaucoup tergiversé, je comprends un peu mieux le problème que je voulais publier pour tous ceux qui en ont déjà eu.

Alors que le jeu de caractères UTF-8 affichera des caractères spéciaux sur le client, le serveur, d’autre part, risque de ne pas être très accommodant et imprimera des caractères spéciaux tels que à et è sous la forme et .

Pour vous assurer que votre serveur les imprimera correctement, utilisez le jeu de caractères ISO-8859-1:

<?php
    /*Just for your server-side code*/
    header('Content-Type: text/html; charset=ISO-8859-1');
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"><!-- Your HTML file can still use UTF-8-->
        <title>Untitled Document</title>
    </head>
    <body>
        <?= "àè" ?>
    </body>
</html>

Cela imprimera correctement: àè


Edit (4 ans plus tard):

J'ai un peu mieux compris maintenant. La raison pour laquelle cela fonctionne est que le client (navigateur) est invité, par le biais de la réponse header(), à s'attendre à un fichier ISO-8859-1 text/html. (Comme d'autres l'ont déjà mentionné, vous pouvez également le faire en mettant à jour vos fichiers .ini ou .htaccess.) Puis, une fois que le navigateur a commencé à analyser ce fichier dans le DOM, la sortie obéira à toute règle <meta charset=""> tout en conservant votre code ISO. personnages en contact.

31
Phil Tune

Vous pouvez avoir un mélange de PHP et HTML dans vos fichiers PHP ... faites quelque chose comme ça ...

<?php
$string = htmlentities("Résumé");
?>

<html>
<head></head>
<body>
<p><?= $string ?></p>
</body>
</html>

Cela devrait générer Résumé comme vous le souhaitez.

Si vous n'avez pas activé les balises courtes, remplacez le <?= $string ?> par <?php echo $string; ?>

2
Justin Wood

Donc, j'essaie htmlspecialchars () ou htmlentities (), qui génère <p> Résumé <p> et le navigateur rend <p> Résumé <p>.

Si vous travaillez avec un code Résumé entouré de balises <p></p>, ne convertissez pas le paragraphe, mais uniquement votre chaîne. Ensuite, le paragraphe sera rendu au format HTML et votre chaîne sera affichée à l'intérieur.

1
NightHawk

Dans PHP, il existe une très bonne fonction utf8_encode () pour résoudre ce problème.

echo utf8_encode("Résumé");

//will output Résumé instead of R�sum�

Consultez la page officielle PHP.

1
Vikas Kandari

$ str = "Votre nom est-il O\'vins?";

// Résultats: Votre nom est-il O'VINS? Echo stripslashes ($ str);

0
Vincy Oommen

Ce qui suit a fonctionné pour moi quand ayant un problème similaire récemment:

$str = iconv('iso-8859-15', 'utf-8', $str);
0
seantunwin

Cela fonctionne pour moi. Essayez celui-ci avant le début du HTML. J'espère que cela fonctionnera aussi pour vous.

<?php header('Content-Type: text/html; charset=iso-8859-15'); ?>
<!DOCTYPE html>

<html lang="en-US">
<head>

0
Hafiz Ameer Hamza

Cela fonctionne pour moi:

Créez/éditez le fichier .htaccess avec ces lignes:

AddDefaultCharset UTF-8
AddCharset UTF-8 .php

Si vous préférez créer/éditer php.ini:

default_charset = "utf-8"

Sources:

0
quantme

Essaye ça

Contribution:

<!DOCTYPE html>
<html>
<body>

<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

<p>Converting &lt; and &gt; into entities are often used to prevent browsers from using it as an HTML element. <br />This can be especially useful to prevent code from running when users have access to display input on your homepage.</p>

</body>
</html>

Sortie:

This is some <b>bold</b> text.

Converting < and > into entities are often used to prevent browsers from using it as an HTML element. This can be especially useful to prevent code from running when users have access to display input on your homepage.
0
Milan Gajjar