Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обрезать текст до определенного html-тега, если он имеется.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: php / mb_substr
Heavenanvil
Отправлено: 16 Сентября, 2016 - 07:18:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Здравствуйте уважаемые веб-гуру )

Проблема следующая:

У меня с сайта новости экспортируются в соцсети и делают это автоматом, через rss.

Есть два вопроса.

1-й вопрос.
В RSS я обрезаю часть новости, чтобы люди переходили по ссылке на сайт (делаю анонс)
PHP:
скопировать код в буфер обмена
  1. $description = ( mb_substr( $description, 0, 500 ) . '...' );

Как видно из этой строчки, берется только первые 500 символов. Все html теги конечно автоматически режутся в соцсетях, но если в новости, в этом месте тег разорвется, то он так и покажется некрасивым текстом. Например:
"Текст, текст, текст!. Текст <p style="text-al..."
Как мне сделать так, чтобы если тег не закрыт, то вообще не учитывать его и обрезать ещё до его начала? Должно получиться вот так:
"Текст, текст, текст!. Текст ..."


2-й вопрос.
Если допустим в тексте новости встречается определенный символ, например ®, как мне сделать "обрезку" до этого символа, включая его? Например:
"Текст, текст, текст, текст ® текст."
а должно получиться:
"Текст, текст, текст, текст"
 
 Top
dcc0
Отправлено: 16 Сентября, 2016 - 08:09:42
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Цитата:
Должно получиться вот так:
"Текст, текст, текст!. Текст ..."

Брать текст до тега с помощью регулярного выражения, preg_match подойдет.

2) на данный вопрос - фактически тот же ответ.


Не знаю, как работает RSS.
Когда в свое время делал ленту новостей, но не RSS, то сделал два поля, которые для пользователя являются зримо одним. В первом поле храню именно обрезанный заголовок, чтобы избежать использования даже регулярок. И это оправдывает себя, когда надо вывести всё, то вывожу оба поля, когда куда-то, допустим, надо сформировать список новостей, то вывожу одно поле из БД.

(Отредактировано автором: 16 Сентября, 2016 - 08:10:19)



-----
Март 2021. Бросил программирование
 
 Top
Heavenanvil
Отправлено: 16 Сентября, 2016 - 08:33:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




dcc0 не обращайте внимание на rss, просто представьте, что работаете просто с текстом и переменными.

А не подскажете, чтобы я долго голову не ломал, как с помощью preg_match это сделать? В тексте ведь могут быть и другие такие теги до этого. Как мне определить последний?
 
 Top
dcc0
Отправлено: 16 Сентября, 2016 - 08:40:06
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Heavenanvil
Если у вас теги могут появиться где угодно (допустим, в начале текста), то придется вообще вырезать все теги.
А для этого есть : strip_tags
https://php[dot]ru/manual/function[dot]strip-tags[dot]html

А вообще лучше изначально проектировать БД и админку так, чтобы обрезание строки было задачей публикатора.


-----
Март 2021. Бросил программирование
 
 Top
Heavenanvil
Отправлено: 16 Сентября, 2016 - 08:52:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




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

update
Ок, strip_tags реально помог лучше, чем я думал. Спасибо огромное.
А как на счет символа ®? Обрезать всё, что после него, включая его.

Разобрался. Сделал немного по другому. В основном помог strrpos, для поиска с конца.

(Отредактировано автором: 16 Сентября, 2016 - 12:34:08)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB