Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кто знает функцию для удаления знаков препинания? 
:(
    Опции темы
sugee
Дата 9.9.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Делаю ленту новостей.
После заголовка вывожу первые 160 символов текста,
после последнего слова многоточие. Щелкнув по ссылке
"подробно" пользователь попадает на страницу
где можно прочитать эту новость в полном варианте.
В общем все как обычно.
В принципе я все сделал - строка обрезается там где нужно,
многоточие ставится, но есть одна неприятность.
После последнего слова в обрезаемой строке может
оказаться знак препинания (и как правило оказывается)
В результате многоточие ставится после этого знака,
что совсем не к чему.
Конечно можно применить str_replace но тогда придется
перебрать все возможные знаки препинания
Нет ли встроенной функции для удаления знаков препинания?
PM MAIL   Вверх
-=Ustas=-
Дата 9.9.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



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


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 9.9.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Можно, конечно регуляркой пройтись....
Я в свое время текст обрезал так. Если абзац укладывается в Энное кол-во символов - замечательно.
Если нет, ищем последнюю точку в первых 500 симолах. Если нет, значит пробел, вот тут можно расширить - знак препинания.
PM ICQ   Вверх
sugee
Дата 9.9.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Так не пойдет
Я разбил строку на подстроки разделенные пробелом
explode(" ",$news);
и перебирая массив считал суммарную длину
$длина+=strlen($массив[$n]);
это значит что последний элемент массива если
в нем есть знак препинания, включает его
Наверное лучше str_replace ничего не придумать
Если только в регулярных выражениях есть какой то
спецсимвол означающий все знаки препинания...

PM MAIL   Вверх
Mal Hack
Дата 9.9.2005, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(sugee @ 9.9.2005, 22:21)
Если только в регулярных выражениях есть какой то
спецсимвол означающий все знаки препинания...

Можно их все просто перечислить.

Цитата(sugee @ 9.9.2005, 22:21)
Так не пойдет

Почему? Подход довольно-таки динамичный, можно под свои нужды переделать.
PM ICQ   Вверх
AntonioBanderaz
Дата 9.9.2005, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 18



А просто:
Код

 $text_news_short = substr($text_news,0,160); //- для обрезания
 $pos_separator = strrpos($text_news_short,' '); //- ищешь положение последнего пробела, но по мне так лучше точки.
 $text_news_short = substr($text_news_short,0,$pos_separator); //- это уже для обрезания до позиции последнего пробела.
 $text_news_short .= '...'; //- для добовления троеточия в конце


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





--------------------
ГЫ... 
PM MAIL ICQ   Вверх
sugee
Дата 10.9.2005, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Чуть не забыл - всем спасибо
PM MAIL   Вверх
sugee
Дата 15.9.2005, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



кстати вот - может кому пригодится:
Код

$news_short=substr($news,0,160);
$last_separator = strrpos($news_short,' '); 
$news_short = substr($news_short, 0, $last_separator);

  $separator[]=",";
  $separator[]="?";
  $separator[]=";";
  $separator[]=":";
  $separator[]="!";
$last_znak = substr($news_short, $last_separator-1, 1);

for($sep=0; $sep<count($separator); $sep++) {
   if($last_znak==$separator[$sep])  
 $news_short = substr($news_short, 0, $last_separator-1);

Я взял за основу то что предложил AntonioBanderaz и немного расширил.
В принципе похоже на то что предлагал Mal Hack
но тут нет этого
Цитата(Mal @ 9.9.2005, 19:38)
Если абзац укладывается в Энное кол-во символов - замечательно

PM MAIL   Вверх
sugee
Дата 15.9.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



забыл кавычку закрыть
Код

$news_short=substr($news,0,160);
$last_separator = strrpos($news_short,' '); 
$news_short = substr($news_short, 0, $last_separator);

  $separator[]=",";
  $separator[]="?";
  $separator[]=";";
  $separator[]=":";
  $separator[]="!";
$last_znak = substr($news_short, $last_separator-1, 1);

for($sep=0; $sep<count($separator); $sep++) {
   if($last_znak==$separator[$sep])  
 $news_short = substr($news_short, 0, $last_separator-1);
}

$news_short=$news_short."...";


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.