Пакетная вставка тегов на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Пакетная вставка тегов на PHP

Сообщение vihtor » Чт сен 01, 2016 3:02 pm

Здравствуйте.
Имеется папка с html файлами. Кодировка файлов win-1251. Всё в "корне" папки, вложенных подпапок нет.
В коде страниц нет тегов <h1></h1>.
Возможно ли, средствами php, первую строку текста, после тега <body>, "обрамить" тегами <h1></h1>?

Хочу добавить.
Кодировку страниц я смогу сделать любую. Какая нужна, такую и сделаю.
И расширения файлов, если нужно, могу переименовать в php

Вот кусок кода страницы:

Код: Выделить всё

<body>
Технические характеристики мотоциклов. Мотоциклы Днепр и Урал.

Нужно сделать так:

Код: Выделить всё

<body>
<
h1>Технические характеристики мотоциклов. Мотоциклы Днепр и Урал.</h1>


Отправлено спустя 17 минут 32 секунды:
Да, ведь нужно во что-то упереться после первой строки. Это тег <p>

Имеется так:

Код: Выделить всё

<body>
Технические характеристики мотоциклов. Мотоциклы Днепр и Урал.
<
p>

Желательно сделать так:

Код: Выделить всё

<body>
<
h1>Технические характеристики мотоциклов. Мотоциклы Днепр и Урал.</h1>
<
p>
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Пакетная вставка тегов на PHP

Сообщение Slash » Чт сен 01, 2016 8:47 pm

Сохранить код в файле, в кодировке UTF-8 без BOM, файл залить в туже папку, где находятся файлы, которые надо отредактировать.

Код: Выделить всё

<?php
$dir   
= getcwd();
$files = scandir($dir);
foreach ($files as $file)
{
    if (preg_match('|\.html|', $file))
    {
        $html = file_get_contents($dir . '/' . $file);
        $html = iconv('windows-1251',       'utf-8', $html);
        $html = str_replace('windows-1251', 'utf-8', $html);

        preg_match('|<body>(.*?)<p>|isu', $html, $line);
        $html = preg_replace('|<body>(.*?)<p>|isu', "<body>\n<h1>" . $line[1] . "</h1>\n<p>", $html);

        $fopen = fopen($file, 'w');
        $write = fwrite($fopen, $html);
        fclose($fopen);
    }
}

Сценарий перекодирует файлы в UTF-8, если это не надо, то удалите строки:

Код: Выделить всё

        $html = iconv('windows-1251',       'utf-8', $html);
        $html = str_replace('windows-1251', 'utf-8', $html);

Но после удаления редактируемые файлы могут отображаться не корректно.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Пакетная вставка тегов на PHP

Сообщение vihtor » Чт сен 01, 2016 10:24 pm

Да, скрипт работает. Но, как говорится без остаточных проблем не обойтись.
Понимаете, страницы сделаны криворуко и не все они однотипные.
Есть на страницах так:

Код: Выделить всё

<body>
Автомобили
<p

Скрипт редактирует так (как я и просил):

Код: Выделить всё

<body>
<
h1>Автомобили</h1>
<
p

Но есть страницы и с такой конструкцией:

Код: Выделить всё

<body>
Мотоциклы
<a href="uploads/posts/2011-05/1306148292_5956.jpg" onclick="return hs.expand(this)" >
<
img align="" src="uploads/posts/2011-05/thumbs/1306148292_5956.jpg" alt='Мотоциклы' title='Мотоциклы'  /></a>&nbsp;||
<
p

И скрипт, естественно, редактирует так:

Код: Выделить всё

<body>
<
h1>Мотоциклы
<a href="uploads/posts/2011-05/1306148292_5956.jpg" onclick="return hs.expand(this)" >
<
img align="" src="uploads/posts/2011-05/thumbs/1306148292_5956.jpg" alt='Мотоциклы' title='Мотоциклы'  /></a>&nbsp;||
</
h1>
<
p

Не знаю как выразиться. Можно ли что-то сделать, чтобы скрипт исключал ссылки?
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Пакетная вставка тегов на PHP

Сообщение Slash » Чт сен 01, 2016 10:39 pm

Вариант с удалением тегов вообще от <body> до <p>, подойдет?
Если да, то замените строчку:

Код: Выделить всё

        $html = preg_replace('|<body>(.*?)<p>|isu', "<body>\n<h1>" . $line[1] . "</h1>\n<p>", $html);

На:

Код: Выделить всё

        $line = strip_tags($line[1]);
        $html = preg_replace('|<body>(.*?)<p>|isu', "<body>\n<h1>" . $line . "</h1>\n<p>", $html);
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Пакетная вставка тегов на PHP

Сообщение vihtor » Чт сен 01, 2016 11:03 pm

Slash писал(а):Вариант с удалением тегов вообще от <body> до <p>, подойдет?

Нет. Это удалит картинки со страниц.
Лучше ещё вариант:

Код: Выделить всё

<body>
<
h1>Текст</h1>
<
a href

Отправлено спустя 1 час 19 минут 46 секунд:
О'кей. Я понял как работать с этим вариантом Скрипта.
Запущу его, пропишу <h1></h1>, а затем @Text Replacer-ом найду страницы, где Скрипт уцепил и ссылки. Введу </a></h1>, щёлкну Найти - делов-то. Таких страниц не много.

Ещё позвольте вопрос. Как всё удалить между <meta property= и </head>? Почему Регулярные выражения в notepad++ не работает. Такие варианты не проходят:

Код: Выделить всё

<meta property=(^.*$)</head>
<
meta property=([^"]*)</head>

Может средствами php получится...

Отправлено спустя 38 минут 43 секунды:
Ага, я уже допетрил как удалить <meta property
Здесь просто пакетно в notepad++ удаляется строка без </head>
Вот так, в моём случае:

Код: Выделить всё

<meta property="og:title" content="([^"]*)" />

Всё, больше вопросов нет. Благодарю за помощь. Бегу работать.

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость