Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Фильтрация HTML и php кода

477
19 июля 2007 года
Robinnovich
182 / / 02.12.2006
Здравствуйте вот такой вопрос возник. Раньше юзал такой кода для фильтрации кода
strip_tags(htmlspecialchars(trim($text), ENT_QUOTES));
но возникла такая нужда некоторые HTML теги оставить так как они записаны не превращая их в HTML сущности.
Ну аот например есть такой код:
<b>test</b><br><textarea>blablabla</textarea><i>test</i>
Нужно <b></b><i></i> оставить так как они есть а <textarea></textarea> превратить в HTML сущности.
7.8K
19 июля 2007 года
Tingo
201 / / 17.05.2007
Стоит использовать регулярные выражения.
Я вижу только такой выход...
477
19 июля 2007 года
Robinnovich
182 / / 02.12.2006
Если можно с примером
16K
19 июля 2007 года
Бян
43 / / 05.09.2006
Конечно коряво, но...
 
Код:
<?php
  $str = "<b>test</b><br><textarea>blablabla</textarea><i>test</i>";
  echo strtr($str,array ("<textarea>" => htmlentities("<textarea>"),
                         "</textarea>" => htmlentities("</textarea>")));
?>
7.8K
19 июля 2007 года
Tingo
201 / / 17.05.2007
Наверое я не правильно понял суть вопроса...
Если Robinnovich, имел ввиду превращение с исключением
то я "за" с Бяном.
477
20 июля 2007 года
Robinnovich
182 / / 02.12.2006
Да именно "превращение с исключением" но как-то оно не то ;) перебирать все теги что надо превращать сильно много кода, проще перебрать те что не нужно переводить.
Подобная функция есть в форуме PHPBB там как бы можно вписать в админке в поле "Разрешить HTML теги" &#8211; a,b,i,u,img и т.д. все остальные превратятся в HTML сущности
7.8K
20 июля 2007 года
Tingo
201 / / 17.05.2007
Как более легкое:
 
Код:
$text="<b>test</b><br><textarea>blablabla</textarea><i>test</i>";
define("S_TA_SYN","<!--%%START_TEXAREA_SYNONYM%%-->");
define("E_TA_SYN","<!--%%END_TEXAREA_SYNONYM%%-->");

$text=str_replace("<textarea>",S_TA_SYN,$text);
$text=str_replace("</textarea>",E_TA_SYN,$text);
$text=htmlspecialchars($text);

$text=str_replace(S_TA_SYN,"<textarea>",$text);
$text=str_replace(S_TA_SYN,"</textarea>",$text);


Не наилучший вариант, но все-таки....
7.8K
20 июля 2007 года
Tingo
201 / / 17.05.2007
А вот и функция выдранная из того-же самого phpBB:
Код:
function clean_html($tag)
{
    global $board_config;

    if (empty($tag[0]))
    {
        return '';
    }

    $allowed_html_tags = preg_split('/, */', strtolower($board_config['allow_html_tags']));
    $disallowed_attributes = '/^(?:style|on)/i';

    // Check if this is an end tag
    preg_match('/<[^\w\/]*\/[\W]*(\w+)/', $tag[0], $matches);
    if (sizeof($matches))
    {
        if (in_array(strtolower($matches[1]), $allowed_html_tags))
        {
            return  '</' . $matches[1] . '>';
        }
        else
        {
            return  htmlspecialchars('</' . $matches[1] . '>');
        }
    }

    // Check if this is an allowed tag
    if (in_array(strtolower($tag[1]), $allowed_html_tags))
    {
        $attributes = '';
        if (!empty($tag[2]))
        {
            preg_match_all('/[\W]*?(\w+)[\W]*?=[\W]*?(["\'])((?:(?!\2).)*)\2/', $tag[2], $test);
            for ($i = 0; $i < sizeof($test[0]); $i++)
            {
                if (preg_match($disallowed_attributes, $test[1][$i]))
                {
                    continue;
                }
                $attributes .= ' ' . $test[1][$i] . '=' . $test[2][$i] . str_replace(array('[', ']'), array('&#91;', '&#93;'), htmlspecialchars($test[3][$i])) . $test[2][$i];
            }
        }
        if (in_array(strtolower($tag[1]), $allowed_html_tags))
        {
            return '<' . $tag[1] . $attributes . '>';
        }
        else
        {
            return htmlspecialchars('<' . $tag[1] . $attributes . '>');
        }
    }
    // Finally, this is not an allowed tag so strip all the attibutes and escape it
    else
    {
        return htmlspecialchars('<' .   $tag[1] . '>');
    }
}

Надеюсь сами разберетесь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог