приветствую всех! извиняюсь за вопрос, пхп совсем не знаю сейчас делаю сайт на амиро, возникла необходимость в заголовке отрезать строку нашел в инете решение, вот такое Код (Text): <?php $string = 'Это строка которую нужно урезать'; $result = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1)); echo $result; if($result!=$string)echo'...'; // выведет "Это строка которую..." ?> вроде все режет, но немного не правильно, помогите подкорректировать сайт в кодировке utf-8, получается этот код режет немного не то кол-во знаков, это ладно можно методом тыка подобрать, проблема в другом У меня вот такой заголовок Заправка картриджей Q2612A для HP LJ 1010, 1012, 1015 мне надо чтобы отрезало до 45 знаков, если это середина слова, то соответственно резало по последнему целому слову и если попадется в конце запятая, то чтобы ее откидывало и в конце ставило три точки т.е. должно получиться Заправка картриджей Q2612A для HP LJ 1010... подскажите и если кто вдруг знаком с амиро, подскажите как засунуть в шаблон амиро кусок кода пхп, просто функцию пхп я понимаю как вставить, а код целиком пока непонятно
Для обрезания строки используется функция http://php.net/substr Это уже простая логика, ничего сложного нет.
ага, только эта функция просто режет и все, на половине слова, хотелось бы чтобы она грамотно отрезала, после слова и убирала запятую после слова
Что-то типа так: PHP: <? $text = substr($text,0,45); $i=strlen(trim($text)); $s = false; while($s && $i>0) { if (substr($text,$i-1,1)==' ') $s = true; $text = substr($text,0,-1); $i--; } $text .= '...'; ?>
а проще никак нельзя? просто тот код который я привел он почти в одну строку делает все что надо, только запятую не удаляет думал его можно как-то подправить и готово)
можно, если вы сами неплохо разбираетесь в регулярных выражения, или знаете того кто сможет вам помочь.
про ник это да))) просто все это запихивать в шаблон мне кажется очень большим вот пример запихивания кода из первого поста Код (Text): <!--#set var="small_special_row" value=" <li> ##--class="##if(urgent)##eshop_list_urgent_small_special_row##else##eshop_list_small_special_row##endif##"--## <b><a href="##eshop_catalog_script####nav_data##"> ##--name--## ##setvar @string = name## ##setvar @result = implode(array_slice(explode('<br>',wordwrap(string,80,'<br>',false)),0,1))## ##result####if(result!=string)##...##endif##</a></b> а ваш вставить еще больше, думал можно просто как-то проблему решить регулярные выражения не знаю, знаю что там только куча символов и ничего не понятно
спасибо за вариант, но запятая на конце слова не отрезается подскажите плиз, как правильно составить регулярное выражение для поиска запятой, пока читаю, но не догоняю
igordata спасибо большое! работает) вроде работает, но все равно спрошу ф-ция trim для вырезания запятой так должна выглядеть trim(string, '\,') или для запятой должен использоваться код? igordata еще косячок вылез, если строка меньше кол-ва отрезаемых символов, то эта строка то же режется, видимо по второму проходу
еще, если не сложно, подскажите плиз выводимая строка в кодировке UTF-8, все эти ф-ции, немного не корректно работают с этой кодировкой как надо поступить? перекодировать строку в win-1251 и использовать выше приведенные ф-ции или использовать специальные функции для многобайтовой кодировки?
UTF-8 - двухбайтовая кодировка. strlen и ему подобные функции возвращают количество байт в строке. Логично предположить, что количество байт должно быть умножено на два. Нужно получить подстроку длиной 6 символов, начиная со второго? Второй символ находится в позиции 2*2, 6 символов - 2*6 байт. Или использовать функции mbstring
вообщем получилась вот такая конструкция Код (Text): $cut_text=trim(mb_substr(text,0,mb_strrpos(mb_substr(text,0,45,'utf-8'),' ',utf-8),'utf-8'), '\,'); а условие по длине строки проверяется при помощи ф-ции mb_strlen вроде все работает, большое всем спасибо! Apple щас еще попробую переписать под однобайтовые функции, проверю попробовал, не получается, как-то хитро режет, наверное, встречаются однобайтовые символы, вообщем строка получается длиннее чем надо при явном указании при utf-8 45 символов, отрезает ровно 45 символов, при использовании однобайтовых ф-ций такой же результат получается при указании 68 символов еще раз всем спасибо!
Более правильно сделать так: (предложенный ранее код работает не всегда правильно): Код (Text): function TrimText($text, $max_text){ $text = str_replace(" ", " ", $text); $string = explode(" ", $text); $count = 100; for ($wordCounter = 0; $wordCounter <= $count;$wordCounter++) { $trimed .= $string[$wordCounter]; if(strlen($trimeed) >= $max_text) break; if($wordCounter < $count){ $trimed .= " "; } } $trimed = trim($trimed); return $trimed; } Ну и в коде ставим: Код (Text): $description = TrimText($description, 70); 70 - это максимальная длинна строки P.S. код может быть грязноват - так что если есть желанее - можете его доработать.