Jump to content

Recommended Posts

При поступлении новых отзывов на сайте иногда замечаю, что старательно набранный большой и красивый отзыв из-за особенностей публикации и хранения этих самых отзывов в бд, на сайте выглядит ужасно, все переносы удаляются, и получается сплошная каша из текста.

 

Я попробовал сам понять из-за чего так, и столкнулся со странным моментом. В контроллере вывода отзыва есть такая строка

text' => strip_tags($result['text']),
 

которая вырезает все html-теги из отзыва. Но зачем это сделано? Ведь при наборе отзыва html преобразовывается в текст, и если убрать strip_tags, то скажем, перенос строки, записанный в отзыв как 

 

br />
 

будет выведен как

 

<br />
 

 

Но при этом переносы, сделанные через enter, в бд сохраняются как спецсимволы в духе \n\r 

 

Я добавил в первую строку функцию nl2br, получилось так:

 

text' => nl2br(strip_tags($result['text'])),
 

в результате отзывы стали выводится такими, какими их набирают посетители, интересно знать, корректное ли это решение?

Share this post


Link to post
Share on other sites

Да, все четко. 

 

UPD, хотя можно ещё вырезать двойные отступы, чтобы не злоупотребляли. Например

nl2br(str_replace("\r\n\r\n", "\r\n", strip_tags($result['text'])));
  • +1 1

Share this post


Link to post
Share on other sites

Тогда уж и про тройные надо подумать, а идиоты нетрадиционно мыслящие покупатели способны и четверные, и пятерные сделать :-)
 

i = 1;
for (i < 99) {
str_replace("\r\n\r\n", "\r\n", strip_tags($result['text']));
i++;
}

PS Или в идеальном случае считать количество вхождений участков с \r\n и до тех пор, пока в каждом из таких участков больше одной пары \r\n идет подряд, менять ее

Share this post


Link to post
Share on other sites

RGB, не-не-не.... Это индусский код. Тогда уже регуляркой... Ща...

Вот эта сделает везде одинарные двойной перенос: 

nl2br(preg_replace('/[\r\n\r\n]+/', "\n", $str))

 

Вот эта везде нулевые одинарный перенос:

nl2br(preg_replace('/[\r\n]{2,}/', "\r\n", $str));

 

А сделать так чтобы запретить только двойные тройной перенос и больше у меня почему-то не получилось. Я слабенький в регулярках. 

Share this post


Link to post
Share on other sites

Спасибо, но лучше понадеюсь на благоразумие покупателей :-)

Share this post


Link to post
Share on other sites

RGB сказал(а) 21 Май 2013 - 12:22:

которая вырезает все html-теги из отзыва. Но зачем это сделано?

Чтобы соответствовать красненькой надписи "HTML в отзывах не поддерживается".

А не поддерживается HTML в пользовательских комментариях обычно для того, чтобы не быть лакомой приманкой для спам-ботов.

Share this post


Link to post
Share on other sites

Это все понятно, вопрос в том, зачем вырезать то, что и так не будет интерпретировано как html? На случай, если какой то больной покупатель решит проверить и запилит комментарий на чистом html?

Share this post


Link to post
Share on other sites

Чтобы не показывать на экране ненужную кашу, не? Тем более всё равно неинтерпретируемую.

А почему она туда попала - уже другой вопрос. По дурости, копипасту, от ботов, по злому умыслу, по причине пользовательских плагинов, прикручивающих ошибочно или по умыслу всем `textarea` какой-то WYSIWYG редактор типа TinyMCE. Или ещё по какой причине, которая мне в голову не пришла. Задача разработчика - раз получив шайбой в лоб, в будущем всю жизнь фильтровать и не доверять пользовательскому вводу.

Share this post


Link to post
Share on other sites

ИМХО вероятность попадания такой каши в поле с отзывом гораздо меньше вероятности использования комментатором клавиши enter в качестве привычного разделителя строки :-)

Share this post


Link to post
Share on other sites

добрый день. Не подскажите как тоже самое сделать в описании товаров (при выводе списка)

 

там такая строчка: 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',

 

Нужно чтобы был доступен перенос строки в описаниях!

Share this post


Link to post
Share on other sites

'description' => nl2br(preg_replace('/[\r\n]{2,}/', "\r\n", utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..'));

Share this post


Link to post
Share on other sites

'description' => nl2br(preg_replace('/[\r\n]{2,}/', "\r\n", utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..'));

Спасибо вам большое. Но что то не так. При вставки вашей строки вместо стандартной - белый экран. Очень прошу проверьте, видимо где то ошибка?

Это в контроллере /catalog/controller/product/category.php

Share this post


Link to post
Share on other sites

:(

Если вы включите отображение ошибок, то увидите ошибку

 

Я показал пример

 

(уберите точку с запятой, поставьте запятую

Share this post


Link to post
Share on other sites

...

там такая строчка: 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',

не лезьте, куда не следует.

тут обрезанное описание. тулить сюда какие либо тэги - рисковать получить незакрытые на выходе. и, как результат, поехавшую верстку.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Diazz
      Ищу специалиста для выполнения 3-х задач: Необходимо перенести существующий сайт с Joomla Virtuemart 2.5 на OpenCart (на шаблон Лайтшоп https://899themes.ru/lightshop/?yclid=402000583208502478) с сохранением url или редиректами Сделать несколько доработок по дизайну и корректно установить некоторые плагины и модули Сделать интеграцию с CRM и Мой Склад   ТРЕБОВАНИЯ К СПЕЦИАЛИСТУ: Опыт переноса интернет-магазинов на Опенкарт, желательно с Джумла Понимание принципов индексации и знание, как осуществить перенос без потери позиций Опыт создания с нуля или допиливания компонентов и модулей - тогда мы сможем развивать сайт дальше именно с вами. Нам проще работать с 1 человеком и постепенно развивать сайт совместно. Задач будет много Опыт интеграции магазина с CRM и Мой Склад и с другими системами (после завершения переезда будет еще один связанный крупный проект)   КОНТЕНТ: Полный перенос категорий с сохранением адресов, либо с редиректами Перенос товаров с картинками (около 2000 товаров) либо с редиректами Перенос статей блога с сохранением адресов либо с редиректами   SEO: Проверка на дубли Перенос всех метатегов и разметки Перенос всех текстов Утверждение структуры и адресов результатов фильтров   ДИЗАЙН: Все доработки будут в рамках текущего шаблона, об этом подробно в ТЗ по каждому типу страниц: главная, основная категория, категории, карточки товара, главная блога, тело статьи. Желательно обсуждать детали совместно исходя из возможностей движка и ваших скиллов. Адаптивность (уже реализовано в шаблоне)   НЕОБХОДИМЫЕ МОДУЛИ И КОМПОНЕНТЫ Часть из них уже есть в шаблоне, возможно что-то нужно будет заменить под наши требования. Вот что нам нужно:   Фильтр товаров (в частности по размерам обуви и одежды) (есть) Поисковик (есть) Модули доставки (СДЭК, Почта, собственные курьеры) Модули оплаты (payanyway) Sitemap Заказ в 1 клик (есть) Корзина в 1 странице (есть) Выгрузка товаров в Яндекс Маркет Google Analytics и Яндекс Метрика Импорт/экспорт товаров, включая опции, свойства, картинки Реферальная система     ИНТЕГРАЦИИ Мы работаем с сервисом Мой склад, нужна полная интеграция (скорее всего в обе стороны). Этот вопрос более подробно нужно будет обсуждать.   Более подробная информация будет предоставлена в процессе обсуждения проекта. Пишите ваши расценки, сроки и задавайте вопросы мне на почту diazz@bk.ru или в телеграмм diazz1990. Ну или сюда, я подписался на тему
    • By seroff
      Модуль фиксации текста строки которые со следующей строчки пишутся рядом.
      Пример:
      Абрикосы бананы.
      Мандарины, апельсины.
       
      Отображает на главной:
      Абрикосы бананы.Мандарины, апельсины.
    • By denisn22031985
      Ребят, есть ли какое то решение по конвертации базы данных из OC 21021 в OC 23023...
       
      проблема заключается в переносе истории клиентов (истории заказов).....
       
      Ребят, помогите решить проблему...
    • By maxx068
      решил перенести магазин на локальный сервер denver
      сделал последовательно
      скачал новый ocstore и установил на компе 
      назвал сайт test.rus
      скачал базу sql и подключил ее
      магазин заработал в версии "из коробки"
      стер все файлы кроме двух config в корне и в админ
      залил все с хостинга
       
      и теперь при открытии test.rus открывается сайт на хостинге(оригинал), если отключаешь сеть, соответственно страница не найдена.
       
      можете подсказать что еще надо исправить или носом ткнуть где почитать , поиском нашел только возможно проблема в файлах header.tpl, но сам не могу найти проблему
       
    • By Sadhi
      Друзья, добрый день.
      Нужно перенести сайт с поддамена на основной домен. На основном стоит магазин рабочий на ОС 2.1. переношу с поддомена OC 2.3 с новым шаблоном. Не могу понять до конца с какой стороны подходить к переносу нет пошаговой схемы так сказать. Как быть с модулями, с базой. Как модули потом запускать на новом сайте?! А магазин рабочий и перенос над сделать быстро и чётко. К тому же я ещё и толком в этом не разбираюсь, учусь ещё.
      Прошу помощи. Если есть возможность, то пошаговая структура не помешает.  Благодарю

       
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.