xss — Как использовать htmlspecialchars (), но сохранить тег & lt; a & gt; помечать вместе с другими в PHP?

Я пытаюсь использовать htmlspecialchars (), но хочу сохранить следующие теги:

<a>, <b> а также <i>,

Как бы я поступил так?

Решения, которые я нашел, похоже, не работают вместе с тегом атрибута и обычным простым тегом.

Вот фрагмент кода, который я нашел, который должен разрешать теги с атрибутами:

function fix_attributes($match){
return "<".$match[1].str_replace('&quot;','"',$match[2]).">";
}
function allow_only($str, $allowed){
$str = htmlspecialchars($str);
foreach( $allowed as $a ){
$str = preg_replace_callback("/&lt;(".$a."){1}([\s\/\.\w=&;:#]*?)&gt;/", fix_attributes, $str);
$str = str_replace("&lt;/".$a."&gt;", "</".$a.">", $str);
}
return $str;
}
echo allow_only('This is <b>bold</b> and <a href="http://www.#links">this</a> is <i>italic</i>.', array("b","a","i"));

Источник

Тем не менее, он продолжает давать мне ошибку: Использование неопределенной константы fix_attributes

Буду признателен за любую помощь в этом!

0

Решение

Проблема: использовать функцию обратного вызова без кавычек

для получения дополнительной информации см. http://php.net/manual/en/function.preg-replace-callback.php

 <?php
function fix_attributes($match){
return "<".$match[1].str_replace('&quot;','"',$match[2]).">";
}
function allow_only($str, $allowed){
$str = htmlspecialchars($str);
foreach( $allowed as $a ){
$str = preg_replace_callback("/&lt;(".$a."){1}([\s\/\.\w=&;:#]*?)&gt;/", "fix_attributes", $str);//use quotes here
$str = str_replace("&lt;/".$a."&gt;", "</".$a.">", $str);
}
return $str;
}
echo allow_only('This is <b>bold</b> and <a href="http://www.#links">this</a> is <i>italic</i>.', array("b","a","i"));
?>
1

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

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

По вопросам рекламы [email protected]