diff options
author | Derek Jones <derek.jones@ellislab.com> | 2010-03-05 17:32:03 +0100 |
---|---|---|
committer | Derek Jones <derek.jones@ellislab.com> | 2010-03-05 17:32:03 +0100 |
commit | 85b2bb7df5e5308b5283e24a3d83aadd1fa9d4de (patch) | |
tree | 9bfd06b1698c682473f4c3c5503578d722ed22e4 /system | |
parent | 2b7de06bd0e2184c9bffc971490f7f640c736a6a (diff) |
improved xml_convert() of XML helper
Diffstat (limited to 'system')
-rw-r--r-- | system/helpers/xml_helper.php | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/system/helpers/xml_helper.php b/system/helpers/xml_helper.php index 712f6777e..09b7aee49 100644 --- a/system/helpers/xml_helper.php +++ b/system/helpers/xml_helper.php @@ -36,25 +36,33 @@ */ if ( ! function_exists('xml_convert')) { - function xml_convert($str) + function xml_convert($str, $protect_all = FALSE) { $temp = '__TEMP_AMPERSANDS__'; // Replace entities to temporary markers so that - // ampersands won't get messed up + // ampersands won't get messed up $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str); - $str = preg_replace("/&(\w+);/", "$temp\\1;", $str); + + if ($protect_all === TRUE) + { + $str = preg_replace("/&(\w+);/", "$temp\\1;", $str); + } $str = str_replace(array("&","<",">","\"", "'", "-"), - array("&", "<", ">", """, "'", "-"), - $str); + array("&", "<", ">", """, "'", "-"), + $str); // Decode the temp markers back to entities $str = preg_replace("/$temp(\d+);/","&#\\1;",$str); - $str = preg_replace("/$temp(\w+);/","&\\1;", $str); - + + if ($protect_all === TRUE) + { + $str = preg_replace("/$temp(\w+);/","&\\1;", $str); + } + return $str; - } + } } |