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 :: Обрезание текста на PHP после третьей запятой, как сделать его правильным

 PHP.SU

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


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

> Без описания
AkudJEE
Отправлено: 24 Октября, 2012 - 20:23:21
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Янв. 2012  
Откуда: Уфа


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




Всем привет. У меня стоит задача обрезать текст после третьей запятой. У меня есть три кода, но все работают неправильно.
К примеру есть текст "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета", нужно его сократить до третьей запятой, должно получиться так: "пассажирский самолет, авиакомпания, закат"
Вот три кода:
1.
PHP:
скопировать код в буфер обмена
  1. $text= "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полетаа";
  2. $imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $text,100,'<br>',false)),0,1));
  3. echo $imagemetakeyimages;

2.
PHP:
скопировать код в буфер обмена
  1. $string="пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета";
  2. function crop_str($string, $limit)
  3. {
  4. $substring_limited = substr($string,0, $limit);        //режем строку от 0 до limit
  5. return substr($substring_limited, 0, strrpos($substring_limited, ', ' ));    //берем часть обрезанной строки от 0 до последнего пробела
  6. }
  7. $limit = 100;  
  8. $new_string = crop_str($string, $limit);
  9. echo  $new_string;

3.
PHP:
скопировать код в буфер обмена
  1. $text1 = "пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета" ;
  2. echo mb_substr(preg_replace("#^(.{100}[^\,\s]*[\,\s])(.+)#s","\\1",$text1),0,-1,'utf8');

Обрезают они этот текст вот так:
1. пассажирский самолет, авиакомпания, закат, красное
2. пассажирский самолет, авиакомпания, закат
3. пассажирский самолет, авиакомпания, закат, красное небо
Работает правильно только второй вариант, но он не работает для множества картинок, то есть текст это ключевые слова картинок, в админке когда я обновляю страницу происходит запрос в базу данных и ключи в обрезанном виде записываются в БД, Код номер 2 работает только если есть одна картинка, а если много, то уже на сайте выводятся крякозябры.
1-й и 3-й варианты неправильно обрезают текст, они не режут вплоть до запятой, а просто режут по количеству символов. Как бы подобрать код, чтобы он правильно обрезал текст, с точностью до запятой?
 
 Top
kokandrey
Отправлено: 24 Октября, 2012 - 20:38:45
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Янв. 2010  
Откуда: Нижегородская обл. г. Дзержинск


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




Разбей строку на части в массив с разделителем ",". Объедини первые три элемента в одну строку через знак ",".
PHP:
скопировать код в буфер обмена
  1.  
  2. $string="пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета";
  3. $i=@explode(',', $string);
  4. $new_string = $i[0].','.$i[1].','.$i[2];
  5. echo $new_string;
  6.  
 
 Top
AkudJEE
Отправлено: 24 Октября, 2012 - 20:45:17
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Янв. 2012  
Откуда: Уфа


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




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

(Отредактировано автором: 24 Октября, 2012 - 20:46:40)

 
 Top
Panoptik
Отправлено: 24 Октября, 2012 - 20:46:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




у вас в этом тексте есть html разметка?


-----
Just do it
 
 Top
AkudJEE
Отправлено: 24 Октября, 2012 - 20:47:38
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Янв. 2012  
Откуда: Уфа


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




Нет, вместо текста я поставлю запрос с бд, вот такой $row->metakey
 
 Top
kokandrey
Отправлено: 24 Октября, 2012 - 20:50:30
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Янв. 2010  
Откуда: Нижегородская обл. г. Дзержинск


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




текст PHP в студию и крякозябу тоже.

В моем примере в конце можно удалить массив i, может поможет.
 
 Top
Panoptik
Отправлено: 24 Октября, 2012 - 20:53:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




вариант предложенный kokandrey верный, почему у вас ломается страница посмотрите в исходном коде. как вариант могут попасться кавычки и они нарушают код, нужно их экранировать некоторыми функциями например htmlspecialchars
PHP:
скопировать код в буфер обмена
  1. $string="пассажирский самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета";
  2. $i=array_slice(@explode(',', $string),0,3);
  3. array_walk($i,'htmlspecialchars');
  4. $new_string = implode(', ',$i);
  5. echo $new_string;


-----
Just do it
 
 Top
AkudJEE
Отправлено: 24 Октября, 2012 - 20:57:10
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Янв. 2012  
Откуда: Уфа


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




Вот запрос в бд:
PHP:
скопировать код в буфер обмена
  1. $test = $begin_a_auto.' '.$begin_b_auto.' '.$begin_c_auto.' '.$begin_d_auto.' '.$begin_e_auto.' '.$catid.', '.'и'.' '.$begin_f_auto.' '.$begin_g_auto;
  2.  $arrqq = array($row->id);      
  3. foreach($arrqq as $d => $s)
  4. {{
  5. $imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $row->metakey,90,'<br>',false)),0,1));
  6. $imgmetadescimages = /*$begin_metaimages.', '.*/$test.' '.$imagemetakeyimages;
  7. if(empty($row->metadesc) && empty ($row->imgtext) && $row->catid == 1 OR empty($row->metadesc) && empty ($row->imgtext) && $row->catid == 5 OR empty($row->metadesc) && empty ($row->imgtext) && $row->catid == 16 OR empty($row->metadesc) && empty ($row->imgtext) && $row->catid == 87 OR empty($row->metadesc) && empty ($row->imgtext) && $row->catid == 90)
  8. {
  9. $dbqq = JFactory::getDBO();
  10. $queryqq = "UPDATE `имяБД`.`имятаблицы` SET `metadesc` = '$imgmetadescimages' WHERE `jos_joomgallery`.`id` ='$s'";
  11. $dbqq->setQuery( $queryqq );
  12. $dbqq->query();
  13. /*$row->metakey = implode(array_slice(explode('<br>', wordwrap($row->metakey, 100,'<br>',false)),0,1));*/}
  14. else if(empty($row->metadesc) && $row->catid == 1 OR empty($row->metadesc) && $row->catid == 5 OR empty($row->metadesc) && $row->catid == 16 OR empty($row->metadesc) && $row->catid == 87 OR empty($row->metadesc) && $row->catid == 90)  {
  15. $imagemetadescimages = $row->imgtext;
  16. $metadescimgimages = $imagemetadescimages.', '.$endmetadescimages;
  17. $dbqq = JFactory::getDBO();
  18. $queryqq = "UPDATE `имяБД`.`имятаблицы` SET `metadesc` = '$metadescimgimages' WHERE `jos_joomgallery`.`id` ='$s'";
  19. $dbqq->setQuery( $queryqq );
  20. $dbqq->query();
  21. }}}

PHP:
скопировать код в буфер обмена
  1. $imagemetakeyimages = implode(array_slice(explode('<br>',wordwrap( $row->metakey,90,'<br>',false)),0,1));

надо заменить.
Это для одной картинки, а на странице их 20

(Отредактировано автором: 24 Октября, 2012 - 20:58:08)

 
 Top
Panoptik
Отправлено: 24 Октября, 2012 - 21:01:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




код говно, это так между нами
по сути без данных с которым работает этот "код" нельзя ничего сказать . нужно знать что в него входит и что получается в браузере, именно в исходном коде


-----
Just do it
 
 Top
AkudJEE
Отправлено: 24 Октября, 2012 - 21:02:03
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Янв. 2012  
Откуда: Уфа


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




Код сам делал, может быть и гавно Улыбка
(Добавление)
Тему можно закрыть. Вот такой код буду использовать:
PHP:
скопировать код в буфер обмена
  1. $str=$row->metakey;
  2. //разбиваем на массив
  3. $arr=explode(", ",$str);
  4. //берем первые 4 запятые
  5. $arr=array_slice($arr,0,4);
  6. //превращаем в строку
  7. $imagemetakeyimages=implode(", ",$arr);
 
 Top
kokandrey
Отправлено: 25 Октября, 2012 - 09:37:53
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Янв. 2010  
Откуда: Нижегородская обл. г. Дзержинск


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




Ну смысл я передел тебе правильный, что сперва в массив, а потом выбрать из массива нужное, а имена переменных и как получается первоначальная строка мог знать только ты, так как ты придумывал исходный код всей программы.
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Октября, 2012 - 09:43:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




PHP:
скопировать код в буфер обмена
  1. $str = $row->metakey;
  2. $imagemetakeyimages=implode(", ", explode(", ", $str, 4));
 
 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