get_html_translation_table

(PHP 4, PHP 5, PHP 7, PHP 8)

get_html_translation_tableRetorna a tabela de tradução usada por htmlspecialchars() e htmlentities()

Descrição

get_html_translation_table(int $table = HTML_SPECIALCHARS, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, string $encoding = "UTF-8"): array

get_html_translation_table() retorna a tabela de tradução usada internamente para htmlspecialchars() e htmlentities().

Nota:

Caracteres especiais podem ser codificados de diversas maneiras. Por exemplo, " pode ser codificado como ", " ou &#x22. get_html_translation_table() retorna apenas a forma usada por htmlspecialchars() e htmlentities().

Parâmetros

table

Informa que tabela deve ser retornada. Pode ser HTML_ENTITIES ou HTML_SPECIALCHARS.

flags

Uma máscara de bits de uma ou mais das opções abaixo, que especificam que tipo de aspas a tabela conterá, assim como para que tipo de documento a tabela serve. O padrão é ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Constantes de flags disponíveis
Nome da Constante Descrição
ENT_COMPAT A tabela conterá entidades para aspas duplas, mas não para aspas simples.
ENT_QUOTES A tabela conterá entitades tanto para aspas duplas quanto para aspas simples.
ENT_NOQUOTES A tabela não conterá entidades nem para aspas simples nem para aspas duplas.
ENT_SUBSTITUTE Substitui sequências de unidade de código inválidas com um Caractere de Substituição Unicode U+FFFD (UTF-8) ou � ao invés de retornar uma string vazia.
ENT_HTML401 Tabela para HTML 4.01.
ENT_XML1 Tabela para XML 1.
ENT_XHTML Tabela para XHTML.
ENT_HTML5 Tabela para HTML 5.

encoding

A codificação a ser usada. Se omitida, o valor padrão para este argumento é UTF-8.

Os seguintes conjuntos de caracteres são suportados:

Conjuntos de caracteres suportados
Conjunto de caracteres Apelidos Descrição
ISO-8859-1 ISO8859-1 Western European, Latin-1.
ISO-8859-5 ISO8859-5 Conjunto de caracteres cirílicos pouco usado (Latim/Cirílico).
ISO-8859-15 ISO8859-15 Western European, Latin-9. Adiciona o símbolo do Euro, letras Francesas e Filandesas faltando no Latin-1 (ISO-8859-1).
UTF-8   Código de multi-byte 8-bit Unicode compatível com ASCII.
cp866 ibm866, 866 Conjunto de caracteres do DOS específico para o Russo.
cp1251 Windows-1251, win-1251, 1251 Conjunto de caracteres do Windows específico para o Russo.
cp1252 Windows-1252, 1252 Conjunto de caracteres do Windows específico para a Europa Ocidental.
KOI8-R koi8-ru, koi8r Russo.
BIG5 950 Chinês Tradicional, usado principalmente em Taiwan.
GB2312 936 Chins Simplificado, conjunto de caracteres padrão nacional.
BIG5-HKSCS   Big5 com extenções de Hong Kong, Chinês Tradicional.
Shift_JIS SJIS, SJIS-win, cp932, 932 Japonês
EUC-JP EUCJP, eucJP-win Japonês
MacRoman   Conjunto de caracteres que era usado pelo Mac OS.
''   Uma string vazia ativa a detecção a partir de codificação de script (multibyte Zend), conjunto padrão de caracteres e localidade atual (consulte nl_langinfo() e setlocale()), nesta ordem. Não recomendado.

Nota: Nenhum outro conjunto de caracteres é reconhecido. A codificação padrão será usada no lugar e um alerta será emitido.

Valor Retornado

Retorna a tabela de tradução como um array, com os caracteres originais como chaves e as entidades como valores.

Registro de Alterações

Versão Descrição
8.1.0 flags mudou de ENT_COMPAT para ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Exemplos

Exemplo #1 Exemplo de Tabela de Tradução

<?php
var_dump
(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES | ENT_HTML5));
?>

O exemplo acima produzirá algo semelhante a:

array(1510) {
  ["
"]=>
  string(9) "&NewLine;"
  ["!"]=>
  string(6) "&excl;"
  ["""]=>
  string(6) "&quot;"
  ["#"]=>
  string(5) "&num;"
  ["$"]=>
  string(8) "&dollar;"
  ["%"]=>
  string(8) "&percnt;"
  ["&"]=>
  string(5) "&amp;"
  ["'"]=>
  string(6) "&apos;"
  // ...
}

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 11 notes

up
15
michael dot genesis at gmail dot com
13 years ago
The fact that MS-word and some other sources use CP-1252, and that it is so close to Latin1 ('ISO-8859-1') causes a lot of confusion. What confused me the most was finding that mySQL uses CP-1252 by default.

You may run into trouble if you find yourself tempted to do something like this:
<?php
    $trans[chr(149)] = '&bull;';    // Bullet
    $trans[chr(150)] = '&ndash;';    // En Dash
    $trans[chr(151)] = '&mdash;';    // Em Dash
    $trans[chr(152)] = '&tilde;';    // Small Tilde
    $trans[chr(153)] = '&trade;';    // Trade Mark Sign
?>

Don't do it. DON'T DO IT!

You can use:
<?php
    $translationTable = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES, 'WINDOWS-1252');
?>

or just convert directly:
<?php
    $output = htmlentities($input, ENT_NOQUOTES, 'WINDOWS-1252');
?>

But your web page is probably encoded UTF-8, and you probably don't really want CP-1252 text flying around, so fix the character encoding first:
<?php
    $output = mb_convert_encoding($input, 'UTF-8', 'WINDOWS-1252');
    $ouput = htmlentities($output);
?>
up
12
kevin at cwsmailbox dot xom
14 years ago
Be careful using get_html_translation_table() in a loop, as it's very slow.
up
3
Kenneth Kin Lum
16 years ago
to display the mapping on a webpage no matter what the server encoding is, this can be used  echo "<pre>\n";  echo htmlentities(print_r((get_html_translation_table(HTML_SPECIALCHARS)), true));  echo htmlentities(print_r((get_html_translation_table(HTML_ENTITIES)), true));since get_html_translation_table() actually gives the special chars in iso-8859-1 (Latin-1) encoding, so to see the tables correctly using  print_r(get_html_translation_table(HTML_ENTITIES));your server needs to give a HTTP header as iso-8859-1, unless you use header() or manually set the browser's encoding setting to iso-8859-1.  And you need to view the source of the page to see the mapping.  (except English version of IE 7 outputs the page source as iso-8859-1 anyway).
up
3
dirk at hartmann dot net
24 years ago
get_html_translation_table
It works only with the first 256 Codepositions.
For Higher Positions, for Example &#1092;
(a kyrillic Letter) it shows the same.
up
1
Jérôme Jaglale
18 years ago
htmlentities includes htmlspecialchars, so here's how to convert an UTF-8 string :htmlentities($string, ENT_QUOTES, 'UTF-8');
up
1
iain (duh) workingsoftware.com.au
17 years ago
I wrote a quick little function for converting something like '&middot;' into '&#183;':$to_convert = '&middot;'; $table = get_html_translation_table(HTML_ENTITIES);$equiv = '&#'.ord(array_search($to_convert,$table)).';';
up
0
Maurizio Siliani at trident dot it
18 years ago
If you have troubles (like me) getting data from ISO-8859-1 encoded forms where user copy and paste from word, this routine could be useful.It adds to the standard get_html_translation_table the codes of the characters usually M$ Word replacs into typed text.Otherwise those characters would never be displayed correctly in html output.function get_html_translation_table_CP1252() {    $trans = get_html_translation_table(HTML_ENTITIES);    $trans[chr(130)] = '&sbquo;';    // Single Low-9 Quotation Mark    $trans[chr(131)] = '&fnof;';    // Latin Small Letter F With Hook    $trans[chr(132)] = '&bdquo;';    // Double Low-9 Quotation Mark    $trans[chr(133)] = '&hellip;';    // Horizontal Ellipsis    $trans[chr(134)] = '&dagger;';    // Dagger    $trans[chr(135)] = '&Dagger;';    // Double Dagger    $trans[chr(136)] = '&circ;';    // Modifier Letter Circumflex Accent    $trans[chr(137)] = '&permil;';    // Per Mille Sign    $trans[chr(138)] = '&Scaron;';    // Latin Capital Letter S With Caron    $trans[chr(139)] = '&lsaquo;';    // Single Left-Pointing Angle Quotation Mark    $trans[chr(140)] = '&OElig;    ';    // Latin Capital Ligature OE    $trans[chr(145)] = '&lsquo;';    // Left Single Quotation Mark    $trans[chr(146)] = '&rsquo;';    // Right Single Quotation Mark    $trans[chr(147)] = '&ldquo;';    // Left Double Quotation Mark    $trans[chr(148)] = '&rdquo;';    // Right Double Quotation Mark    $trans[chr(149)] = '&bull;';    // Bullet    $trans[chr(150)] = '&ndash;';    // En Dash    $trans[chr(151)] = '&mdash;';    // Em Dash    $trans[chr(152)] = '&tilde;';    // Small Tilde    $trans[chr(153)] = '&trade;';    // Trade Mark Sign    $trans[chr(154)] = '&scaron;';    // Latin Small Letter S With Caron    $trans[chr(155)] = '&rsaquo;';    // Single Right-Pointing Angle Quotation Mark    $trans[chr(156)] = '&oelig;';    // Latin Small Ligature OE    $trans[chr(159)] = '&Yuml;';    // Latin Capital Letter Y With Diaeresis    ksort($trans);    return $trans;}
up
0
Patrick nospam at nospam mesopia dot com
20 years ago
Not sure what's going on here but I've run into a problem that others might face as well...<?php$translations = array_flip(get_html_translation_table(HTML_ENTITIES,ENT_QUOTES));?>returns the single quote ' as being equal to &#39; while<?php$translatedString = htmlentities($string,ENT_QUOTES);?>returns it as being equal to &#039;I've had to do a specific string replacement for the time being... Not sure if it's an issue with the function or the array manipulation.-Pat
up
-2
kumar at chicagomodular.com
22 years ago
without heavy scientific analysis, this seems to work as a quick fix to making text originating from a Microsoft Word document display as HTML:

<?php
function DoHTMLEntities ($string)
    {
        $trans_tbl = get_html_translation_table (HTML_ENTITIES);
        
        // MS Word strangeness.. 
        // smart single/ double quotes:
        $trans_tbl[chr(145)] = '\''; 
        $trans_tbl[chr(146)] = '\''; 
        $trans_tbl[chr(147)] = '&quot;'; 
        $trans_tbl[chr(148)] = '&quot;'; 

                // Acute 'e'
        $trans_tbl[chr(142)] = '&eacute;';
        
        return strtr ($string, $trans_tbl);
    }
?>
up
-3
Alex Minkoff
20 years ago
If you want to display special HTML entities in a web browser, you can use the following code:<?$entities = get_html_translation_table(HTML_ENTITIES);foreach ($entities as $entity) {    $new_entities[$entity] = htmlspecialchars($entity);}echo "<pre>";print_r($new_entities);echo "</pre>";?>If you don't, the key name of each element will appear to be the same as the element content itself, making it look mighty stupid. ;)
up
-4
kevin_bro at hostedstuff dot com
22 years ago
Alans version didn't seem to work right. If you're having the same problem consider using this slightly modified version instead:function unhtmlentities ($string)  {   $trans_tbl = get_html_translation_table (HTML_ENTITIES);   $trans_tbl = array_flip ($trans_tbl);   $ret = strtr ($string, $trans_tbl);   return preg_replace('/&#(\d+);/me',       "chr('\\1')",$ret);}
To Top