Я пытаюсь использовать htmlspecialchars (), но хочу сохранить следующие теги:
<a>
, <b>
а также <i>
,
Как бы я поступил так?
Решения, которые я нашел, похоже, не работают вместе с тегом атрибута и обычным простым тегом.
Вот фрагмент кода, который я нашел, который должен разрешать теги с атрибутами:
function fix_attributes($match){
return "<".$match[1].str_replace('"','"',$match[2]).">";
}
function allow_only($str, $allowed){
$str = htmlspecialchars($str);
foreach( $allowed as $a ){
$str = preg_replace_callback("/<(".$a."){1}([\s\/\.\w=&;:#]*?)>/", fix_attributes, $str);
$str = str_replace("</".$a.">", "</".$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
Буду признателен за любую помощь в этом!
Проблема: использовать функцию обратного вызова без кавычек
для получения дополнительной информации см. http://php.net/manual/en/function.preg-replace-callback.php
<?php
function fix_attributes($match){
return "<".$match[1].str_replace('"','"',$match[2]).">";
}
function allow_only($str, $allowed){
$str = htmlspecialchars($str);
foreach( $allowed as $a ){
$str = preg_replace_callback("/<(".$a."){1}([\s\/\.\w=&;:#]*?)>/", "fix_attributes", $str);//use quotes here
$str = str_replace("</".$a.">", "</".$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"));
?>
Других решений пока нет …