<?php
/**
* This file is part of the CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* CodeIgniter XML Helpers
*/
if (! function_exists('xml_convert'))
{
/**
* Convert Reserved XML characters to Entities
*
* @param string $str
* @param boolean $protectAll
* @return string
*/
function xml_convert(string $str, bool $protectAll = false): string
{
$temp = '__TEMP_AMPERSANDS__';
// Replace entities to temporary markers so that
// ampersands won't get messed up
$str = preg_replace('/&#(\d+);/', $temp . '\\1;', $str);
if ($protectAll === true)
{
$str = preg_replace('/&(\w+);/', $temp . '\\1;', $str);
}
$original = [
'&',
'<',
'>',
'"',
"'",
'-',
];
$replacement = [
'&',
'<',
'>',
'"',
''',
'-',
];
$str = str_replace($original, $replacement, $str);
// Decode the temp markers back to entities
$str = preg_replace('/' . $temp . '(\d+);/', '&#\\1;', $str);
if ($protectAll === true)
{
return preg_replace('/' . $temp . '(\w+);/', '&\\1;', $str);
}
return $str;
}
}
|