Задать вопрос

Как обернуть текст в теги p?

Всем привет. Есть примерно такой текст. Как максимально менее ресурсозатратно оборачивать текст в тег <p>? При этом изображения должны оставаться без тега.
<img src="/images/1.jpg">
Какой-то текст
<img src="/images/2.jpg"><img src="/images/3.jpg">Еще текст
Тут текст<img src="/images/4.jpg">И еще текст


UPD: Нужно сделать это на php, но проблема, что мой метод (ниже) не будет работать правильно, если друг в начале вместо картинки окажется текст или другой тег.
$str .= '<p>'.preg_replace('/(\<img.*\>)/', '</p>\1<p>', $text).'</p>';
  • Вопрос задан
  • 2143 просмотра
Подписаться 2 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
В cakephp есть хелпер один на эту тему, может поможет

/**
     * Formats paragraphs around given text for all line breaks
     *  <br /> added for single line return
     *  <p> added for double line return
     *
     * @param string $text Text
     * @return string The text with proper <p> and <br /> tags
     * @link http://book.cakephp.org/3.0/en/views/helpers/text.html#converting-text-into-paragraphs
     */
    public function autoParagraph($text)
    {
        if (trim($text) !== '') {
            $text = preg_replace('|<br[^>]*>\s*<br[^>]*>|i', "\n\n", $text . "\n");
            $text = preg_replace("/\n\n+/", "\n\n", str_replace(["\r\n", "\r"], "\n", $text));
            $texts = preg_split('/\n\s*\n/', $text, -1, PREG_SPLIT_NO_EMPTY);
            $text = '';
            foreach ($texts as $txt) {
                $text .= '<p>' . nl2br(trim($txt, "\n")) . "</p>\n";
            }
            $text = preg_replace('|<p>\s*</p>|', '', $text);
        }

        return $text;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы