encoding — Пользовательский htmlspecialchars (), не кодирует закодированное переполнение стека

все это работает как htmlspecialchars(), htmlentities(), html_entities_decode(), urldecode() e.t.c это как беспорядок. Итак, я решил создать свою собственную функцию, которая будет делать именно то, что мне нужно, комбинируя функции каждой из них. Проблема в том, что строки, которые я закомментировал в массиве. Я хочу закодировать символы& #; «но если я сделаю это, моя функция также закодирует закодированные символы.
Есть ли способ кодировать эти символы, если в таблице не было части закодированных элементов? (таблица может расти больше в будущем …)
Это моя функция:

function my_htmlspecialchars($string, $type='encode')
{

$all = array(
'΄'     => '´',
'\\'    => '\',
'\''    => ''',
'"'     => '"',
'|'     => '|',
'~'     => '~',
'{'     => '{',
'}'     => '}',
'€'     => '€',
//      '&'     => '&',
':'     => ':',
'!'     => '!',
'@'     => '@',
'+'     => '+',
'='     => '=',
'^'     => '^',
'$'     => '$',
'*'     => '*',
'%'     => '%',
'?'     => '?',
//      '#'     => '#',
//      ';'     => '&#59;',
'`'     => '`',
','     => ',',
'.'     => '.',
'('     => '(',
')'     => ')',
'['     => '[',
']'     => ']',
'<'     => '&lt;',
'>'     => '&gt;'
);

$count = 0;
$output = $string;

// do the work
switch($type)
{
case "encode":
$output = str_replace(array_keys($all), $all, $string, $count);
break;

case "decode":
$output = str_replace($all, array_keys($all), $string, $count);
break;
}return $output;
}

Пример использования:

    $orgText = "\"' $ # @ % & &lt;p&gt;test&lt;/p&gt; <span>test2</span>";
$orgText .= ": ; ? ! @ + = & ` ΄ ' \" < > ( ) { } \\ | [ ] ~ ^ * # , . % € ";
echo 'org: '.$orgText."<br>";
##  $myText = htmlspecialchars($myText, ENT_QUOTES);
#   echo 'sch: '.$myText."<br>";
$encode = htmlentities($orgText, ENT_QUOTES);
echo 'entities encode: '.$encode."<br>";
$decode = html_entity_decode($encode, ENT_QUOTES, 'UTF-8')."<br>";
echo 'entities decode1: '.$decode;
echo 'entities decode2: '.html_entity_decode($decode, ENT_QUOTES, 'UTF-8')."<br>";

$myEncode = my_htmlspecialchars($orgText, 'encode');
echo 'my encode: '.$myEncode."<br>";
$myDecode = my_htmlspecialchars($myEncode, 'decode');
echo 'my decode: '.$myDecode."<br>";
/* The output in a browser should be:
"' $ # @ % &

test
test2: ; ? ! @ + = & ` ΄ ' " < > ( ) { } \ | [ ] ~ ^ * # , . % €
*/

Вывод приведенного выше примера (в браузере):

 org: "' $ # @ % & <p>test</p> test2: ; ? ! @ + = & ` ΄ ' " < > ( ) { } \ | [ ] ~ ^ * # , . % €
entities encode: "' $ # @ % & &lt;p&gt;test&lt;/p&gt; <span>test2</span>: ; ? ! @ + = & ` � ' " < > ( ) { } \ | [ ] ~ ^ * # , . % �
entities decode1: "' $ # @ % & <p>test</p> test2: ; ? ! @ + = & ` � ' " < > ( ) { } \ | [ ] ~ ^ * # , . % �
entities decode2: "' $ # @ % &

test
test2: ; ? ! @ + = & ` � ' " < > ( ) { } \ | [ ] ~ ^ * # , . % �

my encode: "' $ # @ % & <p>test</p> <span>test2</span>: ; ? ! @ + = & ` ´ ' " < > ( ) { } \ | [ ] ~ ^ * # , . % €
my decode: "' $ # @ % &

test
test2: ; ? ! @ + = & ` ΄ ' " < > ( ) { } \ | [ ] ~ ^ * # , . % €

Я думаю, что решение должно сделать что-то с помощью preg_replace (), но я не могу понять, как.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector