$value) $trans[$key] = '&#'.ord($key).';'; // dont translate the '&' in case it is part of &xxx; $trans[chr(38)] = '&'; } // after the initial translation, _do_ map standalone "&" into "&" return preg_replace ("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&", strtr ($string, $trans)); } /** * Cleans a string by encoding to UTF-8 and replacing the HTML * entities to their numeric counterparts (possibly double encoding) * * @param mixed String or array of strings to be cleaned. * * @return mixed The cleaned string or array. */ function safe_output_xml ($string) { if (is_numeric ($string)) return $string; if (is_array ($string)) { array_walk ($string, 'safe_output_xml'); return $string; } static $table; static $replace; if (empty ($table)) { $table = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES); $replace = array (); foreach ($table as $key => $value){ $table[$key] = "/".$value."/"; $char = htmlentities ($key, ENT_QUOTES, "UTF-8"); $replace[$char] = "&#".ord ($key).";"; } } //now perform a replacement using preg_replace //each matched value in $table will be replaced with the corresponding value in $replace return preg_replace ($table, $replace, $string); } /** * Avoid magic_quotes protection * * @param string Text string to be stripped of magic_quotes protection */ function unsafe_string ($string) { if (get_magic_quotes_gpc ()) return stripslashes ($string); return $string; } /** * Convert the $value encode in html entity to clear char string. * * @param mixed String or array of strings to be cleaned. * * @return unknown_type */ function safe_output($value) { if (is_numeric($value)) return $value; if (is_array($value)) { array_walk($value, "safe_output"); return $value; } if (! mb_check_encoding ($value, 'UTF-8')) $value = utf8_encode ($value); $valueHtmlEncode = html_entity_decode ($value, ENT_QUOTES, "UTF-8"); return $valueHtmlEncode; } ?>