strpos и непонятности

Lithium366

Новичок
strpos и непонятности

Необходимо выбрать из текста все, что находится внутри {preview}...{/preview}
Что я делаю неправильно?

PHP:
$int1 = strpos($descr[$cur_cat]['Page']['txt'], "{preview}");
$int2 = strpos($descr[$cur_cat]['Page']['txt'], "{/preview}");
$descr[$cur_cat]['Page']['txt'] = substr($descr[$cur_cat]['Page']['txt'], $int1 + 9, $int2 - 9);
Результат разный. Иногда:

Системы охранной сигнализации(ОС) предназначены для обеспечения охраны объекта и материальных ценностей и своевременного оповещения операторов: службы безопасности объекта и/или других заинтересованных служб о чрезвычайных происшествиях на объекте.
В состав ОС, кроме технических средств охраны, также входят средства технической укреплённости объекта(физические преграды). {/p
А иногда:
* изолирующие противогазы
* самоспасатели
* дыхательные аппараты

{/preview}
-~{}~ 07.06.07 16:58:

А иногда и вот так:

Переносные вентиляторы газодымоудаления были разработаны для объектов, где отсутствует стационарная система противодымной защиты и для автомобилей пожарных частей. Применение переносных вентиляторов газодымоудаления (дымососов) является эффективным и малозатратным способом удаления газодымовоздушной среды, образовавшейся в помещении после тушения пожара или срабатывания установки газового пожаротушения.{/preview}

Переносной вентилятор газодымоудаления также применяется в производственных помещен
 

tony2001

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

Lithium366

Новичок
Автор оригинала: tony2001
код в посте - чисто для визуального наслаждения или должен нести какой-то смысл?
если последнее, то без переменных этого не получится.
То есть? У меня же 2 переменные. В первую записывается позиция первого вхождения {preview}, а во вторую - {/preview} и далее зная позиции substr. Не понял Вашего вопроса
 

tony2001

TeaM PHPClub
и я не понял вашего, об этом и говорю.
"некий код у меня работает вот так. а я хотел чтобы он работал вот так. вот вам кусок кода в отрыве от контекста."
 

Lithium366

Новичок
кусок кода - это то, как у меня реализовано и ниже результат. А должно работать следующим образом: Выбирать из $descr[$cur_cat]['Page']['txt'] только ту часть текста, которая находится между кастомными тегами {preview}...{/preview}

-~{}~ 07.06.07 17:21:

Под результатом понимается
<?php
echo $descr[$cur_cat]['Page']['txt'];
?>
 

tony2001

TeaM PHPClub
*sigh*
ну разве так сложно понять, что мне этот код ничего не говорит?
разве так сложно догадаться, что какой-то кусок какого-то кривого кода БЕЗ ДАННЫХ ничем помочь не может?
ну правда. давайте я вам задам вопрос типа "у меня проблема.", вы же спросите меня "какая?" или вы сразу мне ответ дадите магическим образом?
или я слишком сложно объясняюсь?

-~{}~ 07.06.07 17:23:

ёёё...
 

Grezz

Новичок
в substr третьим параметром должна передаваться длина "вырезаемого" куска текста, а не его (куска текста) финишная позиция
 

Lithium366

Новичок
Код:
PHP:
echo "-------cur_cat------\n";
echo $cur_cat."\n";
        			
echo "------До обработки--------\n";
echo "<pre>";
var_dump($descr[$cur_cat]['Page']['txt']);
echo "</pre>";
        			
$int1 = strpos($descr[$cur_cat]['Page']['txt'], "{preview}");
$int2 = strpos($descr[$cur_cat]['Page']['txt'], "{/preview}");
$descr[$cur_cat]['Page']['txt'] = substr($descr[$cur_cat]['Page']['txt'], $int1 + 9, $int2);	

echo "------После обработки--------\n";
echo "<pre>";
var_dump($descr[$cur_cat]['Page']['txt']);
echo "</pre>";
Результат:
-------cur_cat------
cat_dym
------До обработки--------
<pre>string(1171) "<p style="margin: 0cm 0cm 0pt" class="MsoNormal">
<span class="fontSize3"><span style="font-family: Times New Roman">{preview}<strong>Переносные вентиляторы газодымоудаления</strong> были разработаны для объектов, где отсутствует стационарная система противодымной защиты и для автомобилей пожарных частей. Применение переносных вентиляторов газодымоудаления (дымососов) является эффективным и малозатратным способом удаления газодымовоздушной среды, образовавшейся в помещении после тушения пожара или срабатывания установки газового пожаротушения.{/preview} <br />

<br />
<strong>Переносной вентилятор газодымоудаления</strong> также применяется в производственных помещениях, в том числе в подземных коллекторах.<br />
</span></span><span class="fontSize3"><span style="font-family: Times New Roman"><strong><br />
Дымососы серии ДПЭ-А</strong>, выпускаемый ООО &quot;СТМ-Сервис&quot;, комплектуются всасывающим и напорным рукавами, позволяющими организовать забор газодымовоздушной смеси и ее выброс наружу без распространения в соседние помещения. Длина рукавов может быть произвольной в зависимости от особенностей защищаемого помещения.</span></span>
</p>
"
</pre>
------После обработки--------
<pre>string(550) "<strong>Переносные вентиляторы газодымоудаления</strong> были разработаны для объектов, где отсутствует стационарная система противодымной защиты и для автомобилей пожарных частей. Применение переносных вентиляторов газодымоудаления (дымососов) является эффективным и малозатратным способом удаления газодымовоздушной среды, образовавшейся в помещении после тушения пожара или срабатывания установки газового пожаротушения.{/preview} <br />

<br />
<strong>Переносной вентилятор газодымоудаления</strong> также применяется в производственных помещен"
</pre>
 

Lithium366

Новичок
Автор оригинала: Grezz
в substr третьим параметром должна передаваться длина "вырезаемого" куска текста, а не его (куска текста) финишная позиция
Я так и делаю. -9 символов первого слова {preview}. Но почему-то не работает так как надо

-~{}~ 07.06.07 17:50:

Все. дошло. Не всегда {preview} находится в начале строки...
 

Lews

Новичок
Дошло, что

"в substr третьим параметром должна передаваться длина "вырезаемого" куска текста, а не его (куска текста) финишная позиция "

или что

"Все. дошло. Не всегда {preview} находится в начале строки... " ?

Если второе, то внимательно перечитайте первое :)
 

Lithium366

Новичок
Автор оригинала: Lews
Дошло, что

"в substr третьим параметром должна передаваться длина "вырезаемого" куска текста, а не его (куска текста) финишная позиция "

или что

"Все. дошло. Не всегда {preview} находится в начале строки... " ?

Если второе, то внимательно перечитайте первое :)
Второе. Просто у меня было -9 символов с конца, но это было без учета того, что {preview} не обязательно находится в начале строки. Надо: $descr[$cur_cat]['Page']['txt'] = substr($descr[$cur_cat]['Page']['txt'], $int1 + 9, $int2 - $int1 - 9);
 
Сверху