IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Урезание названия продукта по целым словам, не по кол-ву символов (https://www.imho.ws/showthread.php?t=95414)

Прохожий_ 06.11.2005 01:53

Урезание названия продукта по целым словам, не по кол-ву символов
 
Приветствую.
Я сделал tab delimited feed (тестовой файл, где вся инфа разделена табуляцией, предназначена для сабмита списка товара)

Так вот, в фиде название должно быть 55 символов.
Вот часть кода:

Код:

$this->data[$data['products_id']] = array (
'name' => substr($this->strip($data['products_name']), 0, 55),

Да, имя обрезается на 55 символов, но в основном обрезается по середине какого либо слова.

Хочу спросить спецов, каким образом обрезать на 55 символов или меньше, что бы слово, если оно попадает под урезание, обрезалось полностью?

Спасибо заранее.

SergoZD 06.11.2005 02:04

Прохожий_
Делай проверку, если длина больше 55, то ищи последний пробел, лежащий в пределах от первого символа до 55-ого и выкидывай всё что после него (включая его), если там пробелов не существует, то обрезай по 55 символу.
PHP код:

if (strrpos(substr($this->strip($data['products_name']), 055)), " ")
{
$this->data[$data['products_id']] = array ( 
'name' => substr($this->strip($data['products_name']), 0strrpos(substr($this->strip($data['products_name']), 055))), .......
}else{
$this->data[$data['products_id']] = array ( 
'name' => substr($this->strip($data['products_name']), 055), .......


Что-то типа того. Правда слишком громоздко как-то, но суть где-то такая.

Прохожий_ 06.11.2005 02:26

Sergo, спасибо.

Я сделал так:
PHP код:

'name' => preg_replace("~^(.{1,55})\b.*~""\\1"$data['products_name']), 


Goryn 08.11.2005 19:47

Вариант для Perl

Код:

my $lenm=55; # Максимальная длина текста
my $namefirst="Это первоначальное название продукта, которое нужно урезать";
my $nameshort=""; # Здесь будет урезанное имя
if (length($namefirst)<=$lenm ) {
 $nameshort=$namefirst;
}
else {
 $ml=substr($namefirst,0,$lenm);
 $ml=~ s/^(.+)(\s)(\S*)$/$1$2$3/;
 $nameshort=$1;
}

Код взят из древнего скрипта. Ща смотрю и мне кажется, что должно сработать и

$nameshort=substr($namefirst,0,$lenm);
$nameshort=~ s/^(.+)(\s)(\S*)$/$1/;


Часовой пояс GMT +4, время: 21:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.