Статьи

Если требуется разбить текст в формате html на несколько колонок, но очень страшно что все поедет, можно воспользоваться этой функцией. Читает все посимвольно (с учетом UTF), разбивает на требуемое количество колонок, и в том случае, если в конце колонки был открыт какой то тег, но закрывается он только в следующей колонке - закрывает его здесь, а в следующей колонке открывает снова. При этом даже если кто-то забыл закрыть тег - он в конце будет автоматически закрыт!

function split_column($text,$column=0,$length=0,$proz=0) {
    $strlen = 0;
    do {
        $strlen++;
    } while (isset($text{$strlen}));

    if ($length == 0) $length = ceil($strlen/$column)*(1+$proz/100);
    if ($column == 0) $column = ceil($strlen/$length);
   
    $open_tags = array();
    $open_tag = false;
    $open_tag_text = '';
    $group=array();
    $group_index=0;
    $group_i=0;
   
    for($i=0;$i<$column;$i++) $group[$i]='';

    $i = 0;
    do {
        if ($text{$i} == '<') {
            $open_tag = true;
            $open_tag_text = '';
        } else {
            if ($open_tag) {
                if ($text{$i} == '>') {
                    $open_tag = false;
                   
                    $pos = strpos($open_tag_text, 'br');
                    if ($pos === false) {
                        if ($open_tag_text{0} == '/') array_pop($open_tags);
                        else {
                            $open_tags[] = $open_tag_text;
                        }
                    }
                    $open_tag_text = '';
                } else {
                    $open_tag_text .= $text{$i};
                }
            } else {
                if ($group_i>$length && $text{$i} == ' ') {
                    if (sizeof($open_tags)>0) {
                        foreach($open_tags as $pv) {
                            $pv = explode(' ',$pv);
                            $group[$group_index] .= "</".$pv[0].">";
                        }
                    }
                   
                    $group_index++;
                   
                    if (sizeof($open_tags)>0) {
                        foreach($open_tags as $pv) {
                            $group[$group_index] .= "<".$pv.">";
                        }
                    }
                   
                    $group_i = 0;
                }
            }
        }
        $group[$group_index] .= $text{$i};
        $group_i++;
        $i++;
    } while (isset($text{$i}));
   
    if (sizeof($open_tags)>0) {
        foreach($open_tags as $pv) {
            $pv = explode(' ',$pv);
            $group[$group_index] .= "</".$pv[0].">";
        }
    }
   
    return $group;
}

Возврат к списку


Текст сообщения*
Защита от автоматических сообщений
Облако тегов
API array CSS facebook IT-биографии JavaScript jQuery Microsoft microsoft MySQL PC php seo SQL ssl twitter апокалипсис баг база данных бизнес битрикс Битрикс браузер веб-ресурс векторная графика графика дизайн единорог жены программистов звук ЗОЖ инстаграмм интернет-магазин инфографика искусство истории ит картинки клиент компьютер конец света конференция кроссбраузерность лень массивы метод Верле музыка мысли мышь объявления ОС отдых отцы и дети парнас ай ти парнас айти передача данных подростки посмеяться правописание причины лени программирование программист продвижение проект размер страницы разметка разработка разработка интернет-магазина разработчик веб-систем распознавание звука реклама русский язык сайт семантическая разметка семинар сертификат сисадмин скорость загрузки сайта слушать создание сортировка социальные сети творчество тестирование умные мысли цитаты яндекс
Последние комментарии

Наши клиенты

Контакты

ООО "Парнас"

420111
г. Казань, ул. Пушкина 18

Телефон :
8-843-236-6001
8-499-550-6001

Почта :
mail@parnas-it.com


скачать реквизиты

Политика в отношении обработки персональных данных 0+ © 2012-2021 "Парнас-АйТи"