Как можно реализовать это в PHP?

Как можно использовать встроенные функции PHP для вставки метки #BANNER# после каждых 10 символов в HTML-странице, не разрывая текст внутри тегов? Приведите, пожалуйста, пример кода.
  • 11 февраля 2025 г. 16:24
Ответы на вопрос 2
Для того чтобы вставить метку `#BANNER#` после каждых 10 символов в HTML-странице, не разрывая текст внутри тегов, нам нужно выполнить несколько шагов:

1. Пройтись по тексту, не затрагивая HTML-теги.
2. Считать символы и добавлять метку после каждых 10 символов.
3. Собрать результат.

Вот пример кода на PHP, который демонстрирует, как это можно сделать:

```php
function insertBannerAfterEveryNChars($html, $n = 10, $banner = '#BANNER#') {
    // Регулярное выражение для поиска текста, игнорируя теги
    $pattern = '/(<[^>]+>|[^<]+)|([^<]+)/';
    preg_match_all($pattern, $html, $matches);

    $result = '';
    $charCount = 0;

    foreach ($matches[0] as $match) {
        if (isset($match[0]) && $match[0] === '<') {
            // Если это тег, просто добавляем его в результат
            $result .= $match;
        } else {
            // Если это текст, обрабатываем его
            $text = $match;
            $textLength = strlen($text);

            while ($textLength > 0) {
                $take = min($n, $textLength);
                $result .= substr($text, 0, $take);
                $text = substr($text, $take);
                $textLength -= $take;
                $charCount += $take;

                if ($textLength > 0) {
                    // Вставляем метку, если есть ещё текст
                    $result .= $banner;
                }
            }
        }
    }

    return $result;
}

// Пример использования
$htmlContent = '<div>Hello world! This is an example of #BANNER# HTML text.</div>';
$modifiedHtml = insertBannerAfterEveryNChars($htmlContent);

echo $modifiedHtml;
```

### Объяснение:
1. Мы используем регулярное выражение, чтобы разбить входной HTML-контент на массив, где каждый элемент — это или HTML-тег, или текст.
2. Для каждого текстового блока мы отслеживаем количество символов и, если достигнут предел `n` (в этом случае 10), добавляем метку `#BANNER#` после него.
3. Результаты собираются и возвращаются как новый HTML.

Такой подход позволяет предотвращать разрывы текста внутри тегов и корректно вставлять метку в нужных местах.
Через explode раздели  по \n, по массиву циклом иди и иногда вставляй #BANNER# <br/> <br/> Или, ещё лучше, внедрись туда, где происходит вывод, скажем,  из базы. И пиши #BANNER# туда.
Похожие вопросы