Strict Standards: Resource ID#29 used as offset, casting to integer (29) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#31 used as offset, casting to integer (31) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#32 used as offset, casting to integer (32) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Найти и заменить [2]
ТвойWeb » WebMaster класс » PHP/Perl » Найти и заменить

Страниц (2): « 1 [2]
 

11. Vladimir - 17 Ноября, 2008 - 09:29:57 - перейти к сообщению
Нужно удалить/заменить "ОТ такого-то фрагмента" и "ДО такого-то".
12. Furax - 17 Ноября, 2008 - 09:38:09 - перейти к сообщению
То есть такой диапазон один. Тогда так:
CODE:
function replaceInterval($Context, $Begin, $End, $Replace)
{
$begin = strpos($Context, $Begin);
$end = strpos($Context, $End) + strlen($End);

return substr($Context, 0, $begin) . $Replace . substr($Context, $end);
}

echo replaceInterval($content, '<--start-->', '<--finish-->', "Чем заменить");
13. Vladimir - 18 Ноября, 2008 - 03:25:08 - перейти к сообщению
CODE:
function replaceInterval($Context, $Begin, $End, $Replace)
{
$begin = strpos($Context, $Begin);
$end = strpos($Context, $End) + strlen($End);

return substr($Context, 0, $begin) . $Replace . substr($Context, $end);
}
if (strpos($txt2, 'слово')!==FALSE)

echo replaceInterval($content, '<--start-->', '<--finish-->', "чем заменить");
else
echo $content;
Не работает.
Если в $txt2 встречается 'слово', то тогда лишь добавляется в начало первого тега "чем заменить", но не заменяется.
14. Furax - 18 Ноября, 2008 - 06:14:15 - перейти к сообщению
А при чём тут вообще другая переменная $txt2?

Да, виноват, не учёл, что искомых подстрок в исходной строке может и не быть. Тогда так:
CODE:
<?php


function replaceInterval($Context, $Begin, $End, $Replace)
{
$begin = strpos($Context, $Begin);
$end = strpos($Context, $End);

if ($begin === FALSE || $end === FALSE)
return $Context;
$end += strlen($End);
if ($begin > $end)
return $Context;

return substr($Context, 0, $begin) . $Replace . substr($Context, $end);
}

echo replaceInterval('Я у <--start-->папы Карло<--finish--> жил долго и счастливо.', '<--start-->', '<--finish-->', "Карабаса-Барабаса");
echo '<br>';
echo replaceInterval('Я у <-start->Чипполино<-finish-> жил долго и счастливо.', '<--start-->', '<--finish-->', "Карабаса-Барабаса");


?>
15. Vladimir - 18 Ноября, 2008 - 14:05:46 - перейти к сообщению
CODE:
$tags = array
(
'<--start-->' => $start,
'<--finish-->' => $finish
);

if (strpos($txt2, 'слово')!==FALSE)

echo strtr($content, $tags);
else
echo $content;
Как здесь указать несколько определённых слов, чтобы при присутствии любого из них, вырезались теги?
16. Furax - 18 Ноября, 2008 - 23:16:42 - перейти к сообщению
Вырезать теги - функцией strip_tags(). Поиск любого из слов нужно делать в цикле:
CODE:
$words = array
(
'слово',
'вначале',
'было'
);

$badword = false;
foreach ($words as $word)
if (strpos($txt2, $word) !== FALSE)
{
$badword = true;
break;
}

if ($badword)
echo strip_tags($content);
else
echo $content;

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0256]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33