如何使用PHP替换不同的html代码?

I have this HTML code in a PHP variable that I want to replace:

$text = "<table><tr><td>$something</td></tr><tr>
<td>$var1 $var2</td>
<td>$var3</td>
<td>$var4</td>
</tr><tr><td>$something</td></tr></table>";

I want to replace it with a concatenated HTML code:

$new_text = "<tr>
    <td>$new_var1 $new_var2</td>
    <td>$new_var3</td>
    <td>$new_var4</td>
    </tr>
<tr>
    <td>$new_var11 $new_var22</td>
    <td>$new_var33</td>
    <td>$new_var44</td>
    </tr>";

I am using str_replace to try to change them but it is not working, I also tried to do rtrim before doing the replace but still to no avail. Will anyone point me to what I am doing wrong here?

What have I tried using str_replace:

$new_text is my concatenated value

$text = str_replace("<tr>
    <td>$var1 $var2</td>
    <td>$var3</td>
    <td>$var4</td>
    </tr>", $new_text, $text);

I also tried:

 $text = str_replace("<tr>
        <td>$var1 $var2</td>
        <td>$var3</td>
        <td>$var4</td>
        </tr>", $new_text, htmlspecialchars($text));

Also:

 $text = rtrim($text);
 $text = str_replace("<tr>
        <td>$var1 $var2</td>
        <td>$var3</td>
        <td>$var4</td>
        </tr>", $new_text, htmlspecialchars($text));

All this are not working.

Don't use " double quotes for php variable string otherwise it will give warnings for variable. For replacing the string containing php variables you need to use nested str_replace and escape $ in str_replace.

$text = '<table><tr><td>$something</td></tr><tr>
<td>$var1 $var2</td>
<td>$var3</td>
<td>$var4</td>
</tr><tr><td>$something</td></tr></table>';
$search='<tr>
<td>$var1 $var2</td>
<td>$var3</td>
<td>$var4</td>
</tr>';
$new_text = '<tr>
    <td>$new_var1 $new_var2</td>
    <td>$new_var3</td>
    <td>$new_var4</td>
    </tr>
<tr>
    <td>$new_var11 $new_var22</td>
    <td>$new_var33</td>
    <td>$new_var44</td>
    </tr>';

echo str_replace(str_replace("\$","",$search),$new_text,str_replace("\$", "",$text));

Demo

$text = '<table><tr><td>$something</td></tr><tr>
<td>$var1 $var2</td>
<td>$var3</td>
<td>$var4</td>
</tr><tr><td>$something</td></tr></table>';


$new_text = "<tr>
    <td>$new_var1 $new_var2</td>
    <td>$new_var3</td>
    <td>$new_var4</td>
    </tr>
<tr>
    <td>$new_var11 $new_var22</td>
    <td>$new_var33</td>
    <td>$new_var44</td>
    </tr>";


 $text = str_replace($text,$new_text,$text);
 echo $text;

Kindly check this code.

If by replace you meant remove all nested < tr > and < td > tags in $text and insert $new_text (which contains a couple of < tr > Tags with nested < td > Tags but without the < table > Tag) in their place; then using preg_replace might do the trick. The Code Snippet below shows how:

IF $something, $var1 THROUGH $var4, $new_var1 THROUGH $new_var44 ARE REAL VARIABLES; THE SNIPPET BELOW WOULD TAKE CARE OF THAT...
<?php

    $text = "<table>
                <tr><td>{$something}</td></tr>
                <tr>
                    <td>{$var1} {$var2}</td>
                    <td>{$var3}</td>
                    <td>{$var4}</td>
                </tr>
                <tr>
                    <td>{$something}</td>
                </tr>
            </table>";

    $new_text = "<tr>
                    <td>{$new_var1} {$new_var2}</td>
                    <td>{$new_var3}</td>
                    <td>{$new_var4}</td>
                 </tr>
                <tr>
                    <td>{$new_var11} $new_var22}</td>
                    <td>{$new_var33}</td>
                    <td>{$new_var44}</td>
                </tr>";

    // THIS WILL REMOVE EVERYTHING BETWEEN <table>...</table> 
    // IN $text AND REPLACE THEM WITH THE CONTENTS OF $new_text
    $result  = preg_replace("#(<table.*?>)(.*)(<\/table.*?>)#si", "$1{$new_text}$3", $text);
IF $something, $var1 THROUGH $var4, $new_var2 THROUGH $new_var44 ARE JUST STRINGS THAT HOLD NO VALUE; THE SNIPPET BELOW WOULD TAKE CARE OF THAT...
<?PHP
    $text = "<table>
                <tr><td>\$something</td></tr>
                <tr>
                    <td>\$var1 \$var2</td>
                    <td>\$var3</td>
                    <td>\$var4</td>
                </tr>
                <tr>
                    <td>\$something</td>
                </tr>
            </table>";

    $new_text = "<tr>
                    <td>\$new_var1 \$new_var2</td>
                    <td>\$new_var3</td>
                    <td>\$new_var4</td>
                 </tr>
                <tr>
                    <td>\$new_var11 \$new_var22</td>
                    <td>\$new_var33</td>
                    <td>\$new_var44</td>
                </tr>";


    // THIS WILL REMOVE EVERYTHING BETWEEN <table>...</table> 
    // IN $text AND REPLACE THEM WITH THE CONTENTS OF $new_text
    $result  = preg_replace("#(<table.*?>)(.*)(<\/table.*?>)#si", "$1{$new_text}$3", $text);
    echo ($result);

Cheers and Good Luck ;-)