PDA

Просмотр полной версии : php/Работа с текстом из echo


MorgaN
10.09.2009, 15:38
Здравствуйте!
Скажите пожалуйста как на php можно изменить полученный текст...
Вообщем:
есть страница test.php


<?php
echo file_get_contents("ftp://login:pass@test.ru/test2.php");
?>


Эта странца выводит примерно следующее:



<p> <a href=000001.htm target=_blank>000068</a> Разный текст
<p> <a href=000002.htm target=_blank>000068</a> Разный текст
<p> <a href=000003.htm target=_blank>000068</a> Разный текст
<p> <a href=000004.htm target=_blank>000068</a> Разный текст
<p> <a href=000005.htm target=_blank>000068</a> Разный текст


Нужно сделать так чтобы скрипт заменял 00000*.htm на test.ru/?test=00000*.png

Возможно ли это?
Помогите пожалуйста...

MDM
10.09.2009, 15:56
file_get_contents возвращает строку, а echo ее выводит. Обрабатывать надо ДО вывода, и лучше массив, а не строку.
Для получения содержимого файла в массиве пользуй file(). Затем пробегись по элементам этого массива и произведи замену. Думаю, лучше использовать regexp.

MorgaN
10.09.2009, 17:27
Пробовал так:
<?php
// Получить содержимое файла в виде массива. В данном примере мы используем
// обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
$lines = file ('ftp://login:pass@test.ru/test2.php');
// Осуществим проход массива и выведем номера строк и их содержимое в виде html-кода.
foreach ($lines as $line)
{
preg_match("[p][b][0-9][0-9][0-9][0-9][0-9][0-9][.][h][t][m]",$line,$replacement);
echo preg_replace("[p][b][0-9][0-9][0-9][0-9][0-9][0-9][.][h][t][m]", "redirect.php?htm=".$replacement[0], $line);
}
?>бесконечно пишет:
Warning: preg_match() [function.preg-match]: Unknown modifier '[' in H:\home\10rus\www\test.php on line 8

Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in H:\home\10rus\www\test.php on line 9потом так:
<?php
// Получить содержимое файла в виде массива. В данном примере мы используем
// обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
$lines = file ('ftp://login:pass@test.ru/test2.php');
// Осуществим проход массива и выведем номера строк и их содержимое в виде html-кода.
foreach ($lines as $line)
{
preg_match("[p][b][0-9]{6}[.][h][t][m]",$line,$replacement);
echo preg_replace("[p][b][0-9]{6}[.][h][t][m]", "redirect.php?htm=".$replacement[0], $line);
}
?> аналогично...
Помогите составить шаблон для pb******.htm
Спасибо...

MDM
10.09.2009, 17:45
$line = preg_replace('#([\d]+)(\.htm)+#', '"http://test.ru/?test=\\1.png"', $line);

MorgaN
10.09.2009, 18:17
Сделал так:

<?php
// Получить содержимое файла в виде массива. В данном примере мы используем
// обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
$lines = file ('ftp://login:pass@test.ru/test2.php');
// Осуществим проход массива и выведем номера строк и их содержимое в виде html-кода.
foreach ($lines as $line)
{
preg_match('#(pb)(/[\d]+)(\.htm)+#',$line,$replacement);
echo preg_replace('#(pb)(/[\d]+)(\.htm)+#', 'http://test.ru/?test=\\1.htm', $line);
}
?> pb******.htm
а должен
http://test.ru/?test=pb******.htm

MDM
10.09.2009, 18:24
В цикле достаточно одной строки. Прежде, чем менять регулярное выражение, выучи, как это работает. В частности, что есть скобки.
foreach ($lines as $line)
{
echo preg_replace('#([\d]+)(\.htm)+#', '"http://test.ru/?test=\\1.png"', $line);
}

Было:
<p> <a href=000001.htm target=_blank>000068</a> Разный текст

Стало:
<p> <a href="http://test.ru/?test=000001.png" target=_blank>000068</a> Разный текст

MorgaN
10.09.2009, 18:32
Спасибо, теперь понятно... )

MorgaN
13.12.2009, 22:55
Возникла новая проблема, никак не могу совладать с этими выражениями...
Вообщем нужно выдрать из переменной $test (она содержит html код страницы), все ссылки такого вида и запихать их в массив:

<a href="http://78.108.179.238/downloadp1/c97cd3605464_915997984/585650/letitbit.net/temp.rar" title="Ваша ссылка на скачивание файла" target="_self"><b><u>Ваша ссылка на скачивание файла</u></b></a>
Известно только имя temp.rar, всё остальное меняется...
Брать нужно только саму ссылку:
http://78.108.179.238/downloadp1/c97cd3605464_915997984/585650/letitbit.net/temp.rar

MorgaN
15.12.2009, 00:53
Сделал так:

preg_match('/http:\/\/[0-9,a-z,A-Z,.,\/,_]*'.$name.'/', $TextBody, $TempRegExp);