0
votes

I am trying to get everything between the {code} tags from the $html string.

So far I have written this but this doesn't work as expected, only replacing the first {code}

Also I would like this to work for many code tags, but haven't gotten this far yet.

<?php    

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
EOT;

$startPos = strpos($html, '{code}');
$endPos = strpos($html, '{/code}');
if($startPos !== false && $endPos !== false){
    $startPos += 6; # strlen('{code}')
    $endPos += 7; # strlen('{/code}')

    // get code
    $code = substr($html, $startPos, $endPos);

    // remove all code apart from start {code}
    $html = substr($html, $startPos-6, $endPos);

    // replace new code
    $new_code = 'test';
    $html = str_replace('{code}', $new_code, $html);
}

echo $html;

Result: - http://codepad.viper-7.com/T9sbbN

testMy test code 1{/code}

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Expected Result

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

test

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

2
What is the expected result? - Arian Faurtosh
@Arian just added this - John Magnolia
if there are multiple {code}addasdf{/code} tags do you want all of them to be replaced with $new_Code? - Arian Faurtosh
As an example that it fine yes, its doing database lookup in real application. - John Magnolia

2 Answers

1
votes

This works for one {code}.

<?php

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
EOT;

$startPos = strpos($html, '{code}');
$endPos = strpos($html, '{/code}');

if($startPos !== false && $endPos !== false){
    $startPos += 6; # strlen('{code}')


    // get code
    $code = substr($html, $startPos, $endPos-$startPos);


    // replace new code
    $new_code = 'test';
    $html = str_replace('{code}'.$code.'{/code}', $new_code, $html);
}

echo $html;

Multiple could look like this:

<?php

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.{code}hi{/code}</p> 
EOT;

$html = test($html);

echo $html;

function test($html){
    do{
        $startPos = strpos($html, '{code}');
        $endPos = strpos($html, '{/code}');

        if($startPos !== false && $endPos !== false){
            $startPos += 6; # strlen('{code}')

            // get code
            $code = substr($html, $startPos, $endPos-$startPos);

            // replace new code
            $new_code = 'test';
            $html = str_replace('{code}'.$code.'{/code}', $new_code, $html);
        }

    }while($startPos !== false && $endPos !== false);


    return $html;
}
1
votes

regexp exsample

$html = preg_replace('/{code}.*{\/code}/', 'test', $html);

with your code: here

check out cool reg exp builder:regexper