Задать вопрос
tankto
@tankto
люблю учиться

Как обрезать текст сохраняя целостность html кода?

Доброй ночи
Предстоит передо мною задача реализовать добавление статьи на сайте через WYSIWYG редактор(html редактор).
При надобности обрезании подобного текста есть большой риск нарушить целостность html-кода.

Появились у меня 2 идеи как решить эту проблему.
1) При выводе, обрезаний текста проверить на исправность, в моем случае провести через библиотеку(HTMLPurifier for Laravel 5) для очистки и "выравнивания" плохо html-кода.
2) При добавлении статьи обрезать текст и пройти по пункту 1 а после чего сохранить в БД, в колонку для краткого содержания статьи.

1 вариант на мой взгляд просто ужасен, так как нам придется вызывать функцию очистки при каждой попытке отобразить статью.
Я бы хотел чтобы вы направили меня в верное русло по решению этой задачи.
  • Вопрос задан
  • 1101 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Неужели так сложно засплитить на 2 части готовый контент статьи с тегами?
1. Отсчитываем нужное кол-во символов чистого текста игнорируя теги и запоминая открытые в стек (закрытые - извлекаем из стека).
2. Режем
3. Закрываем теги из стека.
4. сохраняем в кэш (в колонку в БД)
Думаю, что лучше тут будет сохранять в 2 колонки: [кол-во символов] и [короткий готовый контент].
Как кол-во символов для превью поменяют в админке - кэш обновится по колонке [кол-во символов].
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
xmoonlight, не, в целом понятно, тег открылся, пошел кусок текста внутри тега, мы отхрямали шмат - соответственно тег закрытия похерился, весь хтмл порушился. Это понятно, не понятно зачем на превьюшке текст с тегами, проще дропнуть теги и выводить тупо текст. Ну или как выше писали - есть гора готовых решений, вопрос хранения в бд этих заранее нарезанных шматков - вопрос соотношения жадности, что не жалко - ресурсов бд или ресурсов памяти/проца.
Ответ написан
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
1 вариант на мой взгляд просто ужасен, так как нам придется вызывать функцию очистки при каждой попытке отобразить статью.

Зачем? Можно же в базе хранить в базе уже обрезанный текст, в дополнительном поле (если стандартное не устраивает).

*Не понимаю, чего все так бояться добавить немного "лишних" (дополнительных) данных в БД... у Вас там гигбайты текста хранить нужно, а база работает на процессоре от калькулятора?

При надобности обрезании подобного текста есть большой риск нарушить целостность html-кода.

Не совсем понятно, что значит "риск нарушить целостность кода"? Нужно из кода что ли текст вырезать? Для этого есть другие инструменты, работающие с DOM-разметкой, они позволяют изменить HTML-элементы и их содержимое без нарушения целостности, какой-нибудь phpQuery например (а ещё Symfony Dom Crawler, Simple HTML DOM и т.д.), если принципиально хочется извращаться над HTML-кодом...

P.S. Для HTML-редакторов, не редко случается такое, что либо пользователь навставлял какой-нибудь ерунды в код, либо сам редактор хорошенько в код нагадил... По этому, я бы всё-таки не снимал со счетов технологию "Хранение нормализованных данных вместе с оригинальными" (о которой я писал выше). Вернее будет сказать, "Хранение оригинальных данных рядом с нормализованными", если по какой-то причине они всё-таки нужны...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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