Фрилансеры предложат решение вашей задачи уже через несколько минут!

Публикация заказа на фриланс бирже не займет много времени.

1 год назад
Игорь К.
Игорь К. 
40 лет, Украина
1 год в сервисе
1 год назад

Есть на входе скрипта Большая HTML статья с какой-то структурой, которая может быть задана тегами H1- H6.
Нужно автоматически генерировать для нее блок-содержание с якорными ссылками, как часто привыкли делать в блогах:
https://webcomplex.com.ua/osnovy-html4/urok-3-html-ssylki-yakorya-i-yakornye-ssylki.html

Функция имеется, но не поддерживает вложенность списка.

Сейчас так:

/*Генератор содержания для длинной статьи*/
function menu_generate($html)
{
//ob_start();
$menu = '';
/*Извлекаем абзацы, содержащие заголовок*/
preg_match_all("/<h[1-6].*?>(.*?)<\/h[1-6]>(.*?)<p.*?>(.*?)<\/p>/is",$html,$h1_matches);
//echo "h1_matches:<pre>".htmlspecialchars(print_r($h1_matches[0],true)."<hr>".$html)."</pre>";
if(!empty($h1_matches[0]))
{
$id = 0;
foreach($h1_matches[0] as $item)
{
/*----Извлекаем сам заголовок из очередного абзаца---*/
preg_match_all("/<h[1-6].*?>(.*?)<\/h[1-6]>/is",$item,$h1);
if(!empty($h1[0]))
{
//echo "<b>Содержимое тегов H1-H6:</b><br>\n";
foreach($h1[0] as $i)
{
$i = strip_tags($i);
//$h1 .= $item.";";
  //echo $item."<br>\n";
$html = str_replace($item,"<span id='m".(++$id)."'>".$item,$html);
$menu .= '<li><a href="#m'.($id).'">'.$i.'</a></li>'."\r\n";
break;
};
}
/*-------*/
};
}
//Возвращаем статью 
return "<ol>".$menu."</ol>".$html;
}

  1. Прием заявок
  2. Выбор исполнителя
  3. Выполнение заказа
  4. Обмен отзывами
Андрей Ковтун
30 лет, Украина
2 года в сервисе
Был онлайн 6 месяцев назад
1 год назад
Григорий Пелипенко
57 лет, Украина
11 лет в сервисе
Был онлайн 3 месяца назад
1 год назад
Мур Стас
37 лет, Россия
1 год в сервисе
Был онлайн 2 месяца назад
1 год назад

Другие заказы в категории «Веб-программирование»

Здесь заказчик и фрилансеры могут обсуждать заказ до начала его выполнения.
Фрилансеры могут участвовать в обсуждении только после подачи заявки.
Здесь заказчик будет контролировать выполнение заказа и общаться с исполнителем.
Доступ к этому разделу имеют только заказчик и выбранный исполнитель.
Все материалы этого раздела закрыты от поисковых систем.