Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

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

 

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

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

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

 

br />
 

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

 

<br />
 

 

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

 

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

 

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

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

Link to post
Share on other sites

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

 

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

nl2br(str_replace("\r\n\r\n", "\r\n", strip_tags($result['text'])));
  • +1 1
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 идет подряд, менять ее

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));

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 1 year later...

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

 

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

 

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

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) . '..'));

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

Link to post
Share on other sites

:(

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

 

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

 

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

Link to post
Share on other sites

...

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

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

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Rambo228
      Здравствуйте друзья, занялся переносом поиска в мобильную версию отдельно в меню, корзина вроде как аналогично работает.
      Перенес из шаблона код поиска, но по кнопке поиск он не видит значения текста введенного в поле поиска.
      там вроде есть скрипт какой то, скажите пожалуйста, как именно его редактировать и куда его нужно вставить после редактирования, а то я пробовал то что нашел на форуме, но что то он не ищет все равно.
    • By Valery332
      Доброго времени суток. Не знаю в тот ли я раздел пишу, если что поправьте. 
      Мне нужно перенести интернет магазина PHP на Opencart 3 с сохранением урлом. Полный перенос товаров, статей и прочего. 
      Кому такое под силу, пишите в ЛС, пришлю ссылку на сайт и подробности.
    • By sergiybigun
      Здравствуйте. Можете ли посоветовать или исправить ошибку после переустановки сервера: 
      пустые экраны на главных страницах :
      http://lazurne.info/
      http://visit.lazurne.info/
      Код ответа при открытии в логе апача access.log: "GET / HTTP/1.1" 304 
       
      все остальный страницы работают : http://lazurne.info/derevyana-vagonka
      в логах ошибки не отображаются
    • By Krasulin
      Добрый день. Нужна помощь.
      Установил заново ocStore 2.3.0.2.3 на новом хостинге, перенёс БД, установил все модуля, но посещение трафика сильно упало, кто может проанализировать в чем дело, поправить, дать рекомендации, на платной основе 
    • By Incubis
      Помогите перенести блок в карточке товара на мобильной версии но так чтобы на десктопной версии не было изменении. Никак не могу найти решения. OcStore 3.0.2.0. Стандартный шаблон.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

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.