Я пытаюсь использовать 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
Буду признателен за любую помощь в этом!
strip_tags()
, если хотите сохранить определенные теги. - person Funk Forty Niner   schedule 14.01.2018strip_tags()
действительно имеет множество проблем и часто может давать плохие результаты (искаженный код). Некоторая форма (очень сложного) регулярного выражения, вероятно, сработает, но это большой ответ...... - person Martin   schedule 14.01.2018preg_replace_callback
, вы должны передать имя функции в виде строки; то есть'fix_attributes'
. Это должно исправить ваше сообщение об ошибке. Но я не могу сказать вам, является ли регулярное выражение безопасным/хорошим. - person jh1711   schedule 14.01.2018<?
в качестве входных данных и приводит к запрещенной «ошибке». - person Osman   schedule 14.01.2018