Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разделить текст
 
 автор: ShadowXak   (06.12.2006 в 09:07)   письмо автору
 
 

Доброго времени суток...
Вопрос в слейдущем!
Имеется форма куда ломака пользователь забивает статью типа:
Хочется верить, что составители этого сборника просто не очень хорошо представляют, что такое "Новая волна" ("New Wave") и какую роль она сыграла в истории мировой фантастики - оттого и используют абсолютно не по назначению этот прославленный брэнд. На самом деле экспериментальных, шокирующих текстов в сборнике "Аэлита-3" раз-два и обчелся. Да и те вышли из-под пера не молодых авторов, а "гостей номера", Геннадия Прашкевича и Святослава Логинова. Основная же часть произведений, включенных в эту книгу - рассказы и повести начинающих фантастов, поданные на конкурс, проводившийся нынешней весной организаторами свердловского фестиваля фантастики "Аэлита". Дело, безусловно, важное и нужное, я бы даже сказал - благое. Кто знает, может быть, именно из этих авторов и вырастут будущие лауреаты "Аэлиты". Тем более что уровень произведений вполне соответствует уровню какой-нибудь сетевой "Грелки" (за вычетом текстов, написанных мэтрами, разумеется). Но все-таки дезориентировать потенциального читателя уже самим названием, пожалуй, не стоило. Да и более тщательный отбор произведений-финалистов этой книге пошел бы только на пользу.
при обработке формы

$words = $_POST['add_product_desc'];

необходимо отсчитать 3 строки текста и присвоить их переменной к примеру $smaltxt
остальное записать в переменную $bigtxt
*******************
2 вариант:
все тоже только отсчитать 100 слов и все записать в $smaltxt
остальное в $bigtxt
----
Заранее спасибо!

   
 
 автор: kasmanaft   (06.12.2006 в 09:43)   письмо автору
 
   для: ShadowXak   (06.12.2006 в 09:07)
 

>> отсчитать 3 строки
А что по вашему строка? Имеется ввиду предложение?

<?php
$str 
'Хочется верить, что составители этого сборника просто не очень хорошо представляют,
 что такое "Новая волна" ("New Wave") и какую роль она сыграла в истории мировой фантастики -
 оттого и используют абсолютно не по назначению этот прославленный брэнд. На самом деле 
экспериментальных, шокирующих текстов в сборнике "Аэлита-3" раз-два и обчелся. Да и те 
вышли из-под пера не молодых авторов, а "гостей номера", Геннадия Прашкевича и Святослава 
Логинова. Основная же часть произведений, включенных в эту книгу - рассказы и повести 
начинающих фантастов, поданные на конкурс, проводившийся нынешней весной 
организаторами свердловского фестиваля фантастики "Аэлита". Дело, безусловно, важное и 
нужное, я бы даже сказал - благое. Кто знает, может быть, именно из этих авторов и вырастут 
будущие лауреаты "Аэлиты". Тем более что уровень произведений вполне соответствует уровню 
какой-нибудь сетевой "Грелки" (за вычетом текстов, написанных мэтрами, разумеется). Но все-
таки дезориентировать потенциального читателя уже самим названием, пожалуй, не стоило. Да 
и более тщательный отбор произведений-финалистов этой книге пошел бы только на пользу.'
;
// три предложения - куски текста до точек.
if (preg_match("#((.*?\.){3})(.*)$#s"$str$regs))
    echo 
$regs[1], "<p>"$regs[3];
// сто слов - куски текста между пробелами.
if (preg_match("#((.*?[\s]+){100})#s"$str$regs))
    echo 
"<p>"$regs[1];
?>

   
 
 автор: tuder   (06.12.2006 в 09:44)   письмо автору
 
   для: ShadowXak   (06.12.2006 в 09:07)
 

Мысли по поводу.

3 строки - это максимум 40-50 слов.
В $bigtxt - лучше записывать весь текст, а не остаток. Меньше проблем.

А при необходимости уже извлекать статью и "откусывать" от неё $smaltxt

Откусывать я бы рекомендовал не слов, а символов 300-400. Это как раз в среднем 6-7 букв в слове * 50 слов. А потом с конца искать ". " - точка-пробел - разделитель предложений. Или просто точку.
Если не нашлось, то искать первую попавшуюся вперёд, чтобы было законченное предложение.
Ну, а если длина строки критична, то потом можно всё равно обрубить по нужной длине.
Попадает в пределы - получаются целые предложения. Не попадает - обрубается.


<?
$bigtxt
='Хочется верить [пример откушен]  только на пользу.';
$sizesmall=400;
$smalltxt=substr($big0$sizesmall);
$long=strrpos($smalltxt".");
if (
$long==0) {
   
$long=strpos($big"."$sizesmall);
}
$smalltxt=substr($big0$long+1);
echo 
$smalltxt;
?>


Вот загони сюда в $bigtxt свой кусок текста и поиграй с параметром $sizesmall=400...300...200

   
 
 автор: ShadowXak   (06.12.2006 в 10:07)   письмо автору
 
   для: tuder   (06.12.2006 в 09:44)
 

нет вы непоняли =)
дело в том что текст забиваеться в форму и после перед записью в базу данных мне необходимо его порезать и записать в малость измененном фомате:


<? $txt =$smltext."[razdel]".$bigtext?>

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

з.ы. вот и необходимо именно 3 строки, а не три предложения, ну или в крайнем случае по словам резать (но тут хуже, т.к. из-за "а, в, с, по, до !" количество будет 10, а строки токо 2 сломаеться дизайн =()

   
 
 автор: kasmanaft   (06.12.2006 в 10:12)   письмо автору
 
   для: ShadowXak   (06.12.2006 в 10:07)
 

В том тексте, что вы привели всего одна строка!

   
 
 автор: tuder   (06.12.2006 в 10:44)   письмо автору
 
   для: ShadowXak   (06.12.2006 в 10:07)
 

Тогда делай не по точке, а по пробелу. Чтобы "разрыв" был не на середине слова.
И подбери нужное количество символов, выводимое в качестве "трёх строк", а не слов.

И в конце моего примера сделай


$bigtxt=substr_replace($bigtxt, "", 0, $long+1);

Вот и будут нужные куски.

   
 
 автор: ShadowXak   (06.12.2006 в 13:42)   письмо автору
 
   для: tuder   (06.12.2006 в 10:44)
 

<?
    
// Порежем текст на 2 части - потом вставим разделитель и снова соединим!
    
$big $_POST['add_product_desc'];
    
$sizesmall=100
    
$smalltxt=substr($big0$sizesmall); 
    
$long=strrpos($smalltxt" "); 
    if (
$long==0) { 
       
$long=strpos($big" "$sizesmall); 
    } 
    
$smalltxt=substr($big0$long+1);  
    
$bigtxt=substr_replace($big""0$long+1); 
    
// Конец порезки ;)
    // Соединяем с вклейкой [razdelitel] через 100 символов + & - до окончания слова
                     
$fulltext ''.$smalltxt."[razdelitel]".$bigtxt.'';
?>

Ну вот полностью рабочий код!
Всем пасибо кто принял участие ))

   
 
 автор: tuder   (06.12.2006 в 13:48)   письмо автору
 
   для: ShadowXak   (06.12.2006 в 13:42)
 

Однако убери вот здесь +1

$smalltxt=substr($big, 0, $long+1); 

- это нужно было, чтобы точка не терялась. А пробел-то зачем тягать? Всё равно там вместо него разделитель встанет.

   
 
 автор: ShadowXak   (07.12.2006 в 11:48)   письмо автору
 
   для: tuder   (06.12.2006 в 13:48)
 

ога я сам уже поправил =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования