Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > количество символов


Автор: Zakir_Kadiri 11.10.2007, 09:22
Привет всем. Рад что заного создаю тему smile Но не рад за то что у меня такая проблема :(

Есть текс с русскими и англискими символами. Например
Код

Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений


надо обрезат
Код

Open Ajax — инициатива, созданная нескол...


надо чтоб только 40 символа принтовал пхп. Если только на русском или на латинском то не проблема, но они вместе ругаеться. У каго то есть идеи, кто нибуд ранше встречалься такой проблемой smile 

Автор: IAmEternaL 11.10.2007, 10:46
подожди... тебе надо просто первые 40 символов вывести?
Код

$str = 'Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений';
echo substr($str, 0, 40);

 smile 
подозреваю, что задача не в этом - но как описал суть проблемы, так и отвечаю

Автор: Zakir_Kadiri 11.10.2007, 12:06
Цитата(IAmEternaL @  11.10.2007,  12:46 Найти цитируемый пост)
подожди... тебе надо просто первые 40 символов вывести?
Выделить всёкод PHP
1:
2:
    
$str = 'Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений';
echo substr($str, 0, 40);

 smile 
подозреваю, что задача не в этом - но как описал суть проблемы, так и отвечаю 


Мда... Ты так ответил что буд то я вообше нечего не знаю о пхп. Даже не говорю о программирование.
Ты так делай. замени 40 на 41 и посмотри что случиться. тогда я буду посмеятся smile 

Автор: vasac 11.10.2007, 13:04
http://ru2.php.net/mb_substr это не поможет?

Автор: Zakir_Kadiri 11.10.2007, 13:27
Это не дефаулт :(

Автор: IAmEternaL 11.10.2007, 14:18
сразу бы так
есть два варианта решения

первый
Код

$str = iconv('UTF-8', 'CP1251', 'Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений');
echo iconv('CP1251', 'UTF-8', substr($str, 0, 40));

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

второй:
Код

$str = 'Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений';
preg_match('/(.{0,40}).*/u', $str, $matches);
echo $matches[1];

работает отлично и проще, + грамотно по отношению к ютф в принципе

Автор: Zakir_Kadiri 11.10.2007, 14:34
Цитата(IAmEternaL @  11.10.2007,  16:18 Найти цитируемый пост)
Выделить всёкод PHP
$str = 'Open Ajax — инициатива, созданная несколькими крупными компаниями для развития технологии Ajax и расширения сферы применения приложений';
preg_match('/(.{0,40}).*/u', $str, $matches);
echo $matches[1];

работает отлично и проще, + грамотно по отношению к ютф в принципе


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

Автор: IAmEternaL 11.10.2007, 14:57
рад что ты выбрал более правильный вариант решения ;)

удачи

Автор: Zakir_Kadiri 11.10.2007, 15:08
Код

preg_match('/(.{0,40}).*/u', $str, $matches);

Если чесна можно ещо модифицирироват
Код

preg_match('/(.{40})/u', $str, $matches);

Но одново я не смог. Надо чтоб
Код

...инициатива, созданная несколькими крупными компаниями...

где то максималное длина символов 30 символ

IAmEternaL, если и в этом ты мне паможеш я помогу в любом деле (почти  smile )

Автор: IAmEternaL 11.10.2007, 16:55
Цитата(Zakir_Kadiri @ 11.10.2007,  13:08)
Код

preg_match('/(.{0,40}).*/u', $str, $matches);

Если чесна можно ещо модифицирироват
Код

preg_match('/(.{40})/u', $str, $matches);

Но одново я не смог. Надо чтоб
Код

...инициатива, созданная несколькими крупными компаниями...

где то максималное длина символов 30 символ

IAmEternaL, если и в этом ты мне паможеш я помогу в любом деле (почти  smile )

модифицировать так - не стоит
потому что в итоге, ты получишь нарезку строки по 40 символов в $matches (вот почему (.{0,40}).*) и, кроме того, она (проверка) не будет работать с строками меньше 40 символов (вот почему (.{0,40}).*)

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

или что ты имел в виду?

Автор: sTa1kEr 11.10.2007, 17:32
Цитата(IAmEternaL @  11.10.2007,  16:55 Найти цитируемый пост)
потому что в итоге, ты получишь нарезку строки по 40 символов в $matches (вот почему (.{0,40}).*)

Не правда. Это preg_match(), а не preg_match_all(), по этому попадут только первые 40 символов, а дальше функция прекратит выполнение.

Автор: Zakir_Kadiri 13.10.2007, 08:32
Цитата(IAmEternaL @  11.10.2007,  18:55 Найти цитируемый пост)
обьясни подробнее последнюю просьбу
тебе нужно обрезать не по символам, а по словам? ну типа чтобы обрывало не на полуслове а в его окончании

или что ты имел в виду?

Ну хорошо обясну все подробно.
Есть поисковой механизм. Ищет слово в тексте и должно принтовать обрезок из текста который соотвествует следующему правилу:

Код

max=100

((...firstext{(max-found_text.length)/2})found_text(endtext...{0,(max-found_text.length)/2})){max}

это вроде алгоритм... не знаю как понятно я описал smile , но думаю всем понятно будеть

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)