Quais são as diferenças entre htmlspecialchars()
e htmlentities()
. Quando devo usar um ou outro?
Na documentação do PHP para htmlentities :
Essa função é idêntica
htmlspecialchars()
em todos os aspectos, exceto comhtmlentities()
, todos os caracteres que possuem entidades de caracteres HTML equivalentes são convertidos nessas entidades.
Na documentação do PHP para htmlspecialchars :
Certos caracteres têm significado especial em HTML e devem ser representados por entidades HTML para preservar seus significados. Esta função retorna uma string com algumas dessas conversões feitas; as traduções feitas são as mais úteis para a programação diária da web. Se você precisar que todas as entidades de caracteres HTML sejam traduzidas, use-o
htmlentities()
.
A diferença é o que é codificado. As opções são tudo (entidades) ou caracteres "especiais", como e comercial, aspas duplas e simples, menor que e maior que (caracteres especiais).
Eu prefiro usar htmlspecialchars
sempre que possível.
Por exemplo:
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()
sempre que possível, além das diferenças óbvias? Que situações o usohtmlentities()
causará problemas, ao passohtmlspecialchars()
que não?htmlentities
ehtmlspecialchars
podem lidar com UTF-8 desde que você especifique"UTF-8"
o terceiro argumento.htmlspecialchars
pode ser usado:Quando não há necessidade de codificar todos os caracteres que possuem seus equivalentes HTML.
Se você souber que a codificação da página corresponde aos símbolos especiais do texto, por que você usaria
htmlentities
?htmlspecialchars
é muito simples e produz menos código a ser enviado ao cliente.Por exemplo:
O segundo é mais curto e não causa problemas se o conjunto de caracteres ISO-8859-1 estiver definido.
Quando os dados serão processados não apenas através de um navegador (para evitar a decodificação de entidades HTML),
Se a saída for XML (veja a resposta da Artefacto ).
fonte
Isso está sendo codificado com
htmlentities
.implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )
:Isso está sendo codificado com
htmlspecialchars
.implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )
:fonte
Porque:
htmlentities
substitui mais caracteres quehtmlspecialchars
. Isso é desnecessário, torna o script PHP menos eficiente e o código HTML resultante menos legível.htmlentities
só é necessário se suas páginas usarem codificações como ASCII ou LATIN-1 em vez de UTF-8 e você estiver manipulando dados com uma codificação diferente da página.fonte
Você deve usar
htmlspecialchars($strText, ENT_QUOTES)
quando quiser que sua string seja segura para XML e HTML:Por exemplo, codifique
No entanto, se você também tiver caracteres adicionais que sejam Unicode ou símbolos incomuns em seu texto, use htmlentities () para garantir que eles apareçam corretamente em sua página HTML.
Notas:
fonte
htmlspecialchars ()
faz a quantidade mínima de codificação para garantir que sua sequência não seja analisada como HTML. Isso deixa sua string mais legível por humanos do que seria se vocêhtmlentities ()
codificasse absolutamente tudo o que possui uma codificação.fonte
Acabei de descobrir sobre a
get_html_translation_table
função. Você o passaHTML_ENTITIES
ouHTML_SPECIALCHARS
e ele retorna uma matriz com os caracteres que serão codificados e como eles serão codificados.fonte
htmlentities - Converta todos os caracteres aplicáveis em entidades HTML.
htmlspecialchars - Converte caracteres especiais em entidades HTML.
As traduções executavam caracteres de tradução abaixo:
Você pode verificar o código a seguir para obter mais informações sobre o que é htmlentities e htmlspecialchars:
https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b
fonte
Você provavelmente deseja usar alguma codificação de caracteres Unicode, por exemplo, UTF-8 e htmlspecialchars. Porque não há qualquer necessidade de gerar "entidades HTML" para "todos [os] caracteres aplicáveis" (que é o que htmlentities faz acordo com a documentação) se ele já está em seu conjunto de caracteres.
fonte
Um pequeno exemplo, eu precisava ter 2 nomes de clientes indexados em uma função:
Originalmente,
$term = get_term_by('name', htmlentities($name), 'client');
resultava em nomes de termos que incluíam apenas o item da matriz e comercial (&), mas não o item acentuado. Mas quando mudei a configuração da variável parahtmlspecialchars
ambos, conseguimos executar a função. Espero que isto ajude!fonte
As diferenças entre htmlspecialchars () e htmlentities () são muito pequenas. Vamos ver alguns exemplos:
htmlspecialchars (string $ string) aceita vários argumentos, onde o primeiro argumento é uma string e todos os outros argumentos (certos sinalizadores, certas codificações etc.) são opcionais. htmlspecialchars converte caracteres especiais na string em entidades HTML. Por exemplo, se você tiver <br> em sua string, o htmlspecialchars o converterá em & lt; b & gt; . Enquanto caracteres como µ † etc. não têm significado especial em HTML. Portanto, eles não serão convertidos em entidades HTML pela função htmlspecialchars , como mostrado no exemplo abaixo.
htmlentities (string $ string) é muito semelhante ao htmlspecialchars e recebe vários argumentos, onde o primeiro argumento é uma string e todos os outros argumentos são opcionais (certos sinalizadores, certas codificações etc.). Ao contrário de htmlspecialchars , htmlentities converte não apenas caracteres especiais na cadeia de caracteres em entidades HTML, mas todos os caracteres aplicáveis em entidades HTML.
fonte
https://dev.w3.org/html5/html-author/charref
Não totalmente, os pls acompanham o link para o documento completo.
fonte