DOM чистка attributes

(Ответов: 2, Просмотров: 540)
  1. Гуру Аватар для MetalMessiah
    • Регистрация: 19.04.2011
    • Сообщений: 745
    • Записей в дневнике: 4
    • Репутация: 189
    Есть проблема. Пользователям дается поле редактирования HTML.
    Надо отфильтровать теги (сделано) и в оставшихся разрешенных тегах отфильтровать аттрибуты.
    Делаю через DOM.
    При этом задание setAttribute пустого значения работает, но в коде получается хлам из пустых аттрибутов, а removeAttribute приводит к тому что не все аттрибуты прорабатываются циклом из-за изменения массива внутри foreach. Как это обойти без дополнительного массива нод и аттрибутов а ля "очереди на удаление"?


    PHP код:
    if ($node->hasAttributes()) 

        
    $attrs $node->attributes
        foreach (
    $attrs as $i => $attr)
        {
            if (!
    in_array($attr->name$allowattrs))
            {
                
    $node->setAttribute($attr->name,"");
                
    //$node->removeAttribute($attr->name);
            
    }
        }

    • 0
  2. Новичок
    • Регистрация: 21.09.2011
    • Сообщений: 6
    • Репутация: -2
    Можно попробовать бежать по аттрибутам не foreach-ем, а while -oм. Увеличивая индекс только если НЕ удаляли.
    Т.е. примерно так (пишу с ходу, не помню досконально синтаксис):
    PHP код:
    $i=0;
    while(
    $i<count($attrs))
    {
    $attr $attrs[$i];
            if (!
    in_array($attr->name$allowattrs))
            {
                
    $node->removeAttribute($attr->name);
            }
           else
          {
                
    $i++;
          }
      } 
    • 1

    Спасибо сказали:

    MetalMessiah(13.10.2011),
  3. Гуру Аватар для MetalMessiah
    • Регистрация: 19.04.2011
    • Сообщений: 745
    • Записей в дневнике: 4
    • Репутация: 189
    о, подход правильный. что-то я вчера уже тупил и не додумался
    только там не count() а $attrs->length
    и прочие оле-заморочки
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Чистка Твиттера
Дайджест блогосферы 7 04.07.2019 16:05
Подбор, парсинг, чистка ключевых слов. Зачем нужно чистить ключевики?
Дорвеи и black SEO 4 15.11.2013 02:14
Чистка от возможных вирусов
Прочее 21 31.08.2011 13:54

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры