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));
$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 ;-)