Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

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

 

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

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 в качестве привычного разделителя строки :-)

Надіслати
Поділитися на інших сайтах

  • 1 year later...

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

 

там такая строчка: '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) . '..',

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

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.