Перейти к содержанию

Рекомендуемые сообщения

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

 

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

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

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

 

br />
 

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

 

<br />
 

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

'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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:(

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От denisn22031985
      Ребят, есть ли какое то решение по конвертации базы данных из OC 21021 в OC 23023...
       
      проблема заключается в переносе истории клиентов (истории заказов).....
       
      Ребят, помогите решить проблему...
    • От maxx068
      решил перенести магазин на локальный сервер denver
      сделал последовательно
      скачал новый ocstore и установил на компе 
      назвал сайт test.rus
      скачал базу sql и подключил ее
      магазин заработал в версии "из коробки"
      стер все файлы кроме двух config в корне и в админ
      залил все с хостинга
       
      и теперь при открытии test.rus открывается сайт на хостинге(оригинал), если отключаешь сеть, соответственно страница не найдена.
       
      можете подсказать что еще надо исправить или носом ткнуть где почитать , поиском нашел только возможно проблема в файлах header.tpl, но сам не могу найти проблему
       
    • От Sadhi
      Друзья, добрый день.
      Нужно перенести сайт с поддамена на основной домен. На основном стоит магазин рабочий на ОС 2.1. переношу с поддомена OC 2.3 с новым шаблоном. Не могу понять до конца с какой стороны подходить к переносу нет пошаговой схемы так сказать. Как быть с модулями, с базой. Как модули потом запускать на новом сайте?! А магазин рабочий и перенос над сделать быстро и чётко. К тому же я ещё и толком в этом не разбираюсь, учусь ещё.
      Прошу помощи. Если есть возможность, то пошаговая структура не помешает.  Благодарю

       
    • От Kam1kadze
      1 500.00 руб
      Скачать/Купить дополнение


      Перенос данных из OpenCart - OcStore 1.5 на 2.X и наоборот
      Перенесу вручную (!) ваш интернет-магазин OpenCart (OcStore) с младшей версии (1.5.X) на старшую (2.X / 3.X) и наоборот.
      Что именно:
      Категории товаров Товары Отзывы (рейтинг) Изображения товаров SEO url (ЧПУ) Опции товаров Атрибуты товаров Покупатели Производители Описание магазина История заказов Прочее, что предусмотрено дефолтной сборкой  
      Связь через Telegram или л/с
      P.S.: НЕ (!) занимаюсь адаптацией шаблонов / модулей. Только голый OpenCart (OcStore).
       
      Два варианта работы:
      Импортируете БД и отправляете мне. Указываете необходимую версию CMS. Получаете под нее БД. (Желательно отключить сторонние модули и расширения) Скидываете бекап сайта. Указываете необходимую версию CMS. Получаете полный бекап сайта новой версии. Добавил Kam1kadze Добавлено 16.08.2017 Категория Услуги  
    • От akulalala
      Уважаемые коллеги, помогите разобраться. У меня есть сайт на опенкарте с наполнением товара более 30000. Хочу сделать ещё один сайт, с другим доменом, вероятно с тем же хостингом, но на другой личный кабинет. Если сделать второй сайт на опенкарте- как мне перенести имеющуюся базу товаров с описаниями, ценами и тд. Чтобы весь товар со всеми плюшками, которые к нему привязаны(категория,описания итд) встал точь в точь на новом сайте. Шаблон планирую сделать какой-то из бесплатных.
      хочу уточнить, что и работать сайты будут соответстенно из 2х разных админок.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.