PHP: вывод текста до определенного тега

12
Dim565
На сайте с 19.08.2010
Offline
57
3526

Добрый день. Такая задача:

есть текст такого вида:

текст1[HEADER]

текст2[CUT]
текст3

Средствами PHP нужно выбрать текст1 (то "тега" HEADER). И вывести его. Потом такое же сделать с текст2 и текст3

с текст1 я делаю так:


$str = $products[$j]['description'];
echo html_entity_decode(substr($str,0,strpos($str, 'HEADER')-1));

$products[$j]['description'] - как раз весь исходный текст

А вот как выбрать текст2 и текст3 (отдельно) уже не знаю, т.к здесь первый вариант уже не прокатит. Скажите пожалуйста - как лучше поступить?

TO
На сайте с 21.09.2007
Offline
170
#1

Тут точно можно написать регулярку, которая вырежет одним махом все куски, но у меня опыта мало. Может, кто-нибудь еще подскажет. :)

Я бы резал извращенским методом через explode - сначала обрезаем по [HEADER], следующей итерацией обрезаем второй элемент получившегося массива по [CUT]

ParserYa
На сайте с 04.10.2010
Offline
29
#2


$str = 'текст1[HEADER]
текст2[CUT]
текст3';
preg_match_all('#(.*)\[HEADER\](.*)\[CUT\](.*)#is',$str,$result);
print_r($result);

Соответственно, в массиве $result будут все лежать нужные вам тексты.

siv1987
На сайте с 02.04.2009
Offline
427
#3

echo html_entity_decode(substr($str, strpos($str, 'HEADER')+1,strpos($str, 'CUT')-1));

gormarket
На сайте с 29.12.2010
Offline
47
#4


$text = 'текст1[HEADER]
текст2[CUT]
текст3';
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);

части текста будут в элементах массива $substr[0], $substr[1] и $substr[2]

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
ДП
На сайте с 23.11.2009
Offline
203
#5

Либо explode строки сначала по первому разделителю, потом остаток по второму и т.д.

Dim565
На сайте с 19.08.2010
Offline
57
#6

Ок, благодарю всех, буду пробовать

Dim565 добавил 04-03-2011 в 07:11

gormarket:

$text = 'текст1[HEADER]
текст2[CUT]
текст3';
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);

части текста будут в элементах массива $substr[0], $substr[1] и $substr[2]

Благодарю. Ваше решение сразу заработало и все очень удобно!

Dim565 добавил 04-03-2011 в 07:34

Извините за такие ламерские вопросы, но может кто еще подскажет:

хочу не писать такой код везде:

$text = 'текст1[HEADER] 

текст2[CUT]
текст3';
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);
echo html_entity_decode($substr[1]);?>
, а описать один раз этот код, а затем выводить где нужно:
echo html_entity_decode($substr[1]);?>
(потом 2 и 3-ий).

Как можно это реализовать? Если пишу так:

<?php $text = 'текст1[HEADER] 

текст2[CUT]
текст3';
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);?>
...
<?php echo html_entity_decode($substr[1]);?>
где ...-другой php-код на странице

- не работает. Видимо, тут нужны или функции или глобальные переменные? Искал в учебниках - везде только примеры, где глобальная переменная внутр <?php ... ?>

А чтобы код вызова переменной был вне основного PHP-кода - не нашел. Если открываю PHP, а знаки ?> ставлю в самом конце кода - тоже не работает

vantonkon
На сайте с 13.02.2011
Offline
1
#7

Почему не работает?

проверил, все отлично у меня работает)

<?php

$text = 'текст1[HEADER]

текст2[CUT]

текст3';

$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);

echo $substr[0];

echo $substr[1];

echo $substr[2];

?>

maldivec
На сайте с 04.11.2008
Offline
160
#8
vantonkon:
проверил, все отлично у меня работает)

Вы сначала поймите, что именно не работает у человека, а потом уж говорите, что у вас все в порядке.

ТС, вам нужно вынести эту операцию в отдельную функцию в отдельный файл, а затем инклюдить его и вызывать функцию в нужном месте.

Примерно так

function.php


<?php
//На входе текст, который нужно разбивать
function decode_text($text)
{
$text = html_entity_decode($text);
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);

return $substr;
}

?>

Другой файл


<?php
....

require_once(*Путь до файла*'function.php');
$text = 'текст1[HEADER]текст2[CUT]текст3';
$data = decode_text($text);
?>

Тут текст html

<?=$data[0];?>

Тут текст html

<? тут другой php ?>

<?=$data[1];?>

Тут текст html

<?=$data[2];?>

...
?>

ЗЫ можно и без выноса в отдельную функцию или файл, но это если вам эта функция больше нигде не понадобиться.

RF
На сайте с 26.04.2009
Offline
107
#9
Dim565:
Как можно это реализовать? Если пишу так:
<?php $text = 'текст1[HEADER] 
текст2[CUT]
текст3';
$substr = preg_split("/\[HEADER\]|\[CUT\]/m",$text);?>
...
<?php echo html_entity_decode($substr[1]);?>
где ...-другой php-код на странице
- не работает. Видимо, тут нужны или функции или глобальные переменные? Искал в учебниках - везде только примеры, где глобальная переменная внутр <?php ... ?>
А чтобы код вызова переменной был вне основного PHP-кода - не нашел. Если открываю PHP, а знаки ?> ставлю в самом конце кода - тоже не работает

Где-то в другом месте ошибка.

<?php code; ?>
HTML
<?php code; ?>
HTML
<?php code; ?>

Весь PHP код будет выполняться точно так же, как если бы он был написан

<?php
code;
code;
code;
?>

Глобальные переменные здесь не нужны.

Проверьте, что на промежутке между присвоением значения переменной $substr и ее выводом вы больше эту переменную не используете.

maldivec
На сайте с 04.11.2008
Offline
160
#10

Сейчас снова перечитал, может быть дело-то в другом.

ТС, чо гадать на кофейной гуще? Выкладывайте код целиком, мы ж не экстрасенсы.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий