Quelles sont les différences entre htmlspecialchars()
et htmlentities()
. Quand dois-je utiliser l'un ou l'autre?
De la documentation PHP pour htmlentities :
Cette fonction est identique à
htmlspecialchars()
tous égards, sauf avechtmlentities()
, tous les caractères qui ont des équivalents d'entité de caractère HTML sont traduits dans ces entités.
De la documentation PHP pour htmlspecialchars :
Certains caractères ont une signification particulière en HTML et doivent être représentés par des entités HTML s'ils veulent conserver leur signification. Cette fonction renvoie une chaîne avec certaines de ces conversions effectuées; les traductions effectuées sont les plus utiles pour la programmation Web quotidienne. Si vous souhaitez que toutes les entités de caractères HTML soient traduites, utilisez
htmlentities()
plutôt.
La différence est ce qui est encodé. Les choix sont tout (entités) ou caractères "spéciaux", comme l'esperluette, les guillemets doubles et simples, inférieurs à et supérieurs à (caractères spéciaux).
Je préfère utiliser htmlspecialchars
autant que possible.
Par exemple:
echo htmlentities('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^ ^
htmlspecialchars()
chaque fois que possible, à part les différences évidentes? Quelles situations l'utilisationhtmlentities()
vous causera des problèmes alors quehtmlspecialchars()
non?htmlentities
ethtmlspecialchars
peut à la fois gérer UTF-8 tant que vous spécifiez"UTF-8"
pour le troisième argument.htmlspecialchars
peut être utilisé:Lorsqu'il n'est pas nécessaire de coder tous les caractères qui ont leurs équivalents HTML.
Si vous savez que le codage de la page correspond aux symboles spéciaux du texte, pourquoi utiliseriez-vous
htmlentities
?htmlspecialchars
est beaucoup plus simple et produit moins de code à envoyer au client.Par exemple:
Le second est plus court et ne pose aucun problème si le jeu de caractères ISO-8859-1 est défini.
Lorsque les données seront traitées non seulement via un navigateur (pour éviter de décoder les entités HTML),
Si la sortie est XML (voir la réponse d'Artefacto ).
la source
Ceci est encodé avec
htmlentities
.implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )
:Ceci est encodé avec
htmlspecialchars
.implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )
:la source
Parce que:
htmlentities
remplace plus de caractères quehtmlspecialchars
. Cela est inutile, rend le script PHP moins efficace et le code HTML résultant moins lisible.htmlentities
n'est nécessaire que si vos pages utilisent des encodages tels que ASCII ou LATIN-1 au lieu de UTF-8 et que vous gérez des données avec un encodage différent de celui de la page.la source
Vous devez utiliser
htmlspecialchars($strText, ENT_QUOTES)
lorsque vous souhaitez que votre chaîne soit sécurisée en XML et HTML:Par exemple, encoder
Cependant, si vous avez également des caractères supplémentaires qui sont des symboles Unicode ou inhabituels dans votre texte, vous devez utiliser htmlentities () pour vous assurer qu'ils s'affichent correctement dans votre page HTML.
Remarques:
la source
htmlspecialchars ()
effectue le minimum d'encodage pour garantir que votre chaîne n'est pas analysée en HTML. Cela laisse votre chaîne plus lisible par l'homme qu'elle ne le serait si voushtmlentities ()
codiez absolument tout ce qui a un codage.la source
Je viens de découvrir la
get_html_translation_table
fonction. Vous passezHTML_ENTITIES
ouHTML_SPECIALCHARS
ou il retourne un tableau avec les caractères qui seront encodés et comment ils seront encodés.la source
htmlentities - Convertit tous les caractères applicables en entités HTML.
htmlspecialchars - Convertit des caractères spéciaux en entités HTML.
Les traductions ont effectué des caractères de traduction ci-dessous:
Vous pouvez vérifier le code suivant pour plus d'informations sur ce qui est htmlentities et htmlspecialchars:
https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b
la source
Vous voudrez probablement utiliser un codage de caractères Unicode, par exemple UTF-8 et htmlspecialchars. Parce qu'il n'y a pas une nécessité de générer des « entités HTML » pour « tous [les] caractères normaux » (qui est ce que htmlentities fait selon la documentation) si elle est déjà dans votre jeu de caractères.
la source
Un petit exemple, j'avais besoin d'avoir 2 noms de clients indexés dans une fonction:
À l'origine, j'ai
$term = get_term_by('name', htmlentities($name), 'client');
abouti à des noms de termes qui comprenaient uniquement l'élément de tableau esperluette (&) mais pas l'élément accentué. Mais lorsque j'ai changé le paramètre de la variable, leshtmlspecialchars
deux ont pu exécuter la fonction. J'espère que cela t'aides!la source
Les différences entre htmlspecialchars () et htmlentities () sont très faibles. Voyons quelques exemples:
htmlspecialchars (string $ string) prend plusieurs arguments alors que le premier argument est une chaîne et tous les autres arguments (certains drapeaux, certains encodages, etc.) sont facultatifs. htmlspecialchars convertit les caractères spéciaux de la chaîne en entités HTML. Par exemple, si vous avez <br> dans votre chaîne, htmlspecialchars la convertira en & lt; b & gt; . Alors que les caractères comme µ † etc. n'ont pas de signification particulière en HTML. Ainsi, ils ne seront pas convertis en entités HTML par la fonction htmlspecialchars comme indiqué dans l'exemple ci-dessous.
htmlentities (string $ string) est très similaire à htmlspecialchars et prend plusieurs arguments alors que le premier argument est une chaîne et que tous les autres arguments sont facultatifs (certains drapeaux, certains encodages, etc.). Contrairement à htmlspecialchars , htmlentities convertit non seulement les caractères spéciaux de la chaîne en entités HTML mais tous les caractères applicables en entités HTML.
la source
https://dev.w3.org/html5/html-author/charref
Pas complètement, veuillez suivre le lien pour un document complet.
la source