Статьи
Если требуется разбить текст в формате 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;
}
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;
}
Облако тегов
Последние комментарии
Наши клиенты
Контакты
ООО "Парнас"
420111
г. Казань, ул. Пушкина 18
Телефон :
8-843-236-6001
8-499-550-6001
Почта :
mail@parnas-it.com