Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> php и textarea - разбор конца и начала строки 
V
    Опции темы
delphi_
Дата 25.11.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



есть вот такая вот задача-мне нужно из многострочной TEXTAREA вводить данные в office xml файл в первозданном виде-то есть тоже многострочно

вопрос вот в чем -

новая строка там задается вот так вот -

Код

<w:p>
<w:pPr>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:t>какой-то текст</w:t>
</w:r>
</w:p>


сл-но,для добавления одной строки мне нужно 

1) найти ее начало,для записи тегов до текста
2) найти ее конец и закрыть теги

вопрос - как? как распарсить textarea и найти начало и конец строк?там веть есть еще и вирт. и физич. методы переноса строк...

конечно,проще понапихать много текстбоксов - дабы не париться с разбором-но это неудобно. textarea гораздо удобнее
PM MAIL   Вверх
Warpkid
Дата 25.11.2010, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



сделай explode по "\n", получишь массив из строк
то бишь:

Код

$arr=explode("\n",$text);

foreach($arr as $k=>$v){
// обрабатываешь строку
$str='<w:p>
<w:pPr>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:t>'.$v.'</w:t>
</w:r>
</w:p>';
}


Это сообщение отредактировал(а) Warpkid - 25.11.2010, 17:59
PM MAIL   Вверх
delphi_
Дата 25.11.2010, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



спасибо

а как такую конструкцию впихнуть в preg_replace ?  мне нужно заменять какую-то фразу на эти новые строки (фраза указывает в xml документе куда текст ставить-этакий маркер)

$source = preg_replace( '/\\bREPORT\\b/', convert_($_POST['REPORT']), $source );

функция convert_ => конвертирует разные кодировки с cp1251 в utf

что-то я себе слабо это представляю
PM MAIL   Вверх
Warpkid
Дата 25.11.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Цитата

мне нужно заменять какую-то фразу на эти новые строки 


ну т.е. есть допустим фраза test и вместо нее надо поставить новые строки?

Код

preg_replace( 'test', convert_($_POST['REPORT']), $source );

PM MAIL   Вверх
delphi_
Дата 25.11.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



нет нет,лучше покажу картиной


user posted image


идея в чем - val1 это маркер для замена регулярками.

на картинке - исходное и нужное состояние ячейки таблицы

как мне этот val заменить на эти вот строки.считать результат эксплоуда в переменную? то-есть как мне применить написанный вами код для preg_replace ?

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

Это сообщение отредактировал(а) delphi_ - 25.11.2010, 18:29
PM MAIL   Вверх
Warpkid
Дата 25.11.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



А ну, 

Код


$arr=explode("\n",$text);

$str='';
foreach($arr as $k=>$v){
// обрабатываешь строку
$str.='<w:p>
<w:pPr>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:t>'.$v.'</w:t>
</w:r>
</w:p>';
}


На выходе из цикла в $str будут все преобразованные строки и потом просто

Код

preg_replace( 'test', convert_($str), $source );


Ну функцию convert_  я не знаю когда лучше применить - до экплода или в preg_replace
PM MAIL   Вверх
delphi_
Дата 25.11.2010, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



====

Это сообщение отредактировал(а) delphi_ - 25.11.2010, 19:08
PM MAIL   Вверх
Warpkid
Дата 25.11.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Надо смотреть код самой страницы, ибо xml состоит из тегов, которые браузер обычно не отображает.

И preg_replace надо делать после цикла.

Код


$arr=explode("\n",convert_($_POST['text1']));

$str='';
foreach($arr as $k=>$v){
// обрабатываешь строку
$str.='<w:p>
<w:pPr>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:t>'.$v.'</w:t>
</w:r>
</w:p>';
}

$source = preg_replace( '/\\btext1\\b/', $str, $source );


PM MAIL   Вверх
delphi_
Дата 25.11.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



ага,я тоже заметил что цикл не правилен
сделал вот такое для теста,с выводом xml 
сделал в textarea 3 строки для наглядности

__________________1
__________________2
__________________3




Код

$str='';
foreach($arr as $k=>$v){
// обрабатываешь строку
$str.='<w:p><w:pPr><w:rPr>
<w:lang w:val="EN-US"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val="EN-US"/></w:rPr><w:t>'.$v.'</w:t></w:r></w:p>';
$lala=htmlspecialchars($str);
echo '</br>';
echo $lala;
echo '</br>';
}






и вот что мне он выдал

О-о
одно и тоже дублируется по несколько раз.это как?

http://s015.radikal.ru/i331/1011/0f/ef70d2714176.png

PM MAIL   Вверх
Warpkid
Дата 25.11.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Ну так правильно, мой цикл - правильный, а твой - нет.

найди отличия между моим:
Код

foreach($arr as $k=>$v){
//
}
$source = preg_replace( '/\\btext1\\b/', $str, $source );


и твоим:
Код

foreach($arr as $k=>$v){
//
echo...
}


В твоем коде вывод в цикле, соответственно эхо отрабатывает 3 раза. 
PM MAIL   Вверх
delphi_
Дата 25.11.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



исправлено,надо мне спать :((((

Код


$links = explode("\n",convert_($_POST['text1']));

$result =''; 


foreach ($links as $link) { 
    $result .= '<w:p><w:pPr><w:rPr><w:lang w:val="EN-US"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val="EN-US"/></w:rPr><w:t>' . $link . '</w:t></w:r></w:p>'; 
} 

echo $aa=htmlspecialchars($result);



Это сообщение отредактировал(а) delphi_ - 25.11.2010, 20:52
PM MAIL   Вверх
delphi_
Дата 25.11.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



появилась еще одна проблема.если задавать руками в коде имя поля-все ок  $a='text1'; .если передать через функцию   blahblah('text1') -скрипт бодро пишет good но на самом деле делает черте что-текст замещает,но каким-то странным кодом

вот финальный код

он работает

Код

$filename = 'in.xml'; //название файла шаблона
$savename='2.xml'; //сохраняемое название файла
(($source = @file_get_contents($filename)));


$a='text1';
$string="<w:t>{$a}</w:t>";


$links = explode("\n",($_POST[$a]));
$result =''; 

foreach ($links as $link)
 { 
  $result .= '<w:p><w:pPr><w:rPr><w:lang w:val="EN-US"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val="EN-US"/></w:rPr><w:t>' . $link . '</w:t></w:r></w:p>'; 
 } 

if ($source=str_replace($string,$result,$source))
 {
   echo '</br>';
   echo 'good';
   echo '</br>';
}
else
  {
    echo '</br>';
    echo 'sgfg';
    echo '</br>';
}

file_put_contents($savename, $source, FILE_TEXT); //сохраняем результат



а вот так вот в функцию - так не работает


Код

function text_($a) 
 {
 
    global $source; //xml файлик

    $string="<w:t>{$a}</w:t>";
    $links = explode("\n",convert_($_POST["{$a}"]));
    $result =''; 

        foreach ($links as $link) { 
            //echo $link;
            $result .='<w:p><w:pPr><w:rPr><w:lang w:val="EN-US"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val="EN-US"/></w:rPr><w:t>'.$link.'</w:t></w:r></w:p>'; 
        } 
        

    if ($source=str_replace($string,$result,$source))
        {
        echo '</br>';
        echo 'good';
        echo '</br>';
        }
        else
        {
        echo '</br>';
        echo 'bad';
        echo '</br>';
        }
        return $source;
    }
    

text_('text1');




почему такое может быть ? О_о толи я слепой,толи я что-то не так делаю...




Это сообщение отредактировал(а) delphi_ - 26.11.2010, 19:38
PM MAIL   Вверх
Warpkid
Дата 26.11.2010, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Строка 7: 

Код

$links = explode("\n",convert_($_POST["{$a}"]));


что здесь делает $_POST? Должен быть аргумент функции - $a :

Код

$links = explode("\n",convert_($a));


Хотя конечно не факт, что это из-за этого, на что хоть заменяет код?
PM MAIL   Вверх
delphi_
Дата 26.11.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



чет я не совсем понял что не так то..)


$links = explode("\n",convert_($_POST["{$a}"]));

например   вызываем функцию TEXT_('text1');

тоесть в скобках и есть $a... так как данные передаются через форму,то это потмо скармливается  $_POST
Код


 <textarea name="text1" cols="30" rows="10" >


 в скобках для функции я передаю имя textarea


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


Код

for ($i = 1; $i < дохрена; $i++) 
      {
     $p="text$i";
     text_($p); 
      }       


Это сообщение отредактировал(а) delphi_ - 26.11.2010, 20:11
PM MAIL   Вверх
Warpkid
Дата 26.11.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Не так то, что так делать не грамотно. Функция должна не зависеть от того, как ты передаешь ей данные, если вдруг понадобится POST заменить на GET, или текст вообще будет браться не из формы?


PM MAIL   Вверх
delphi_
Дата 26.11.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



это все не важно.скрипт будет написан и про пхп я забуду как про страшный сон


важнее понять почему функция не работает нивкаком виде,а просто код-работает...
PM MAIL   Вверх
Warpkid
Дата 26.11.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Ты заменил POST на переменную как я сказал и функция все равно не работает?
PM MAIL   Вверх
delphi_
Дата 26.11.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



в общем нашел я проблему

по дефолту xml от офиса формируется в одну строку и php не может одекватно заменить код в ней.в итоге он пихает все в конец как выяснилось.естесно структура документа летит и office ругается на неверный xml

скачал с сайта мелкасофта прогу XML Notepad и через нее сохранил заново,уже с нормальной построчной разметкой.заодно и читабельнее стало

а,и еще важно сохранять в UTF...ну это и так понятно
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1219 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.