get_html_translation_table

(PHP 4, PHP 5)

get_html_translation_table --  Возвращает таблицу преобразований, используемую функциями htmlspecialchars() и htmlentities()

Описание

array get_html_translation_table ( int table [, int quote_style] )

get_html_translation_table() возвращает таблицу преобразований, используемую функциями htmlspecialchars() и htmlentities().

Константы HTML_ENTITIES и HTML_SPECIALCHARS позволяют указать нужную таблицу преобразований. Аналогично функциям htmlspecialchars() и htmlentities() можно задать необязательный аргумент quote_style, равный по умолчанию ENT_COMPAT. Описание quote_style см. в описании функции htmlspecialchars().

Пример 1. Пример таблицы преобразований

<?php
$trans
= get_html_translation_table(HTML_ENTITIES);
$str = "Hallo & <Frau> & Krдmer";
$encoded = strtr($str, $trans);
?>
Переменная $encoded будет содержать: "Hallo &amp; &lt;Frau&gt; &amp; Kr&auml;mer".

Другим интересным применением этой функции является измененин направления преобразования с помощью функции array_flip().

<?php
$trans
= array_flip($trans);
$original = strtr($encoded, $trans);
?>

Переменная $original будет содержать: "Hallo & <Frau> & Krämer".

См. также описание функций htmlspecialchars(), htmlentities(), strtr() и array_flip().



get_html_translation_table
Patrick nospam at nospam mesopia dot com
29-May-2005 07:00
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
Alex Minkoff
18-May-2005 04:30
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. ;)
ryan at ryancannon dot com
26-Jan-2005 02:05
In XML, you can't assume that the doctype will include the same character entity definitions as HTML. XML authors may require character references instead. The following two functions use get_html_translation_table() to encode data in numeric references. The second, optional argument can be used to substitute a different translation table.

function xmlcharacters($string, $trans='') {
   $trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
   foreach ($trans as $k=>$v)
       $trans[$k]= "&#".ord($k).";";
   return strtr($string, $trans);
}
function xml_character_decode($string, $trans='') {
   $trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
   foreach ($trans as $k=>$v)
       $trans[$k]= "&#".ord($k).";";
   $trans=array_flip($trans);
   return strtr($string, $trans);
}
kevin_bro at hostedstuff dot com
03-Jan-2003 06:06
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);
}
alan at akbkhome dot com
03-Jun-2002 10:00
If you want to decode all those &#123; symbols as well....

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('/\&\#([0-9]+)\;/me',
       "chr('\\1')",$ret);
}
programmer at bardware dot de
03-Aug-2001 05:28
It doesn't work if text is CP850 encoded. I obtain text CP850 encoded from a database since it was imported in the DB from a CSV file that was created in DOS text format.
dirk at hartmann dot net
19-Jun-2001 01:41
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.
jon+php-dev at unequivocal dot co dot uk
10-Sep-2000 07:38
Caution: This function is implemented separately from htmlentities() and htmlspecialchars() in the PHP source, and hence is quite likely to diverge from these functions.

In particular, in 4.0.2 htmlspecialchars() escapes the single quote character, whereas the translation table returned by this function does not.

<fprintfhebrev>
 Last updated: Tue, 15 Nov 2005