$string = "<tag>i dont know what is here</tag>"
$string = str_replace("???", "<tag></tag>", $string);
echo $string; // <tag></tag>
Alors, quel code je cherche?
$search = "/[^<tag>](.*)[^<\/tag>]/";
$replace = "your new inner text";
$string = "<tag>i dont know what is here</tag>";
echo preg_replace($search,$replace,$string);
les sorties:
<tag>your new inner text</tag>
Une fonction générique:
function replace_between($str, $needle_start, $needle_end, $replacement) {
$pos = strpos($str, $needle_start);
$start = $pos === false ? 0 : $pos + strlen($needle_start);
$pos = strpos($str, $needle_end, $start);
$end = $pos === false ? strlen($str) : $pos;
return substr_replace($str, $replacement, $start, $end - $start);
}
$string = "<tag>i dont know what is here</tag>"
$string = preg_replace('#(<tag.*?>).*?(</tag>)#', '$1$2', $string)
$string = "<tag>i dont know what is here</tag>"
$string = "<tag></tag>";
echo $string; // <tag></tag>
ou juste?
$string = str_replace($string, "<tag></tag>", $string);
Désolé, je n'ai pas pu résister. Peut-être que vous mettez à jour votre question avec quelques détails supplémentaires. ;)
Si "tag" change:
$string = "<tag>i dont know what is here</tag>";
$string = preg_replace('|^<([a-z]*).*|', '<$1></$1>', $string)
echo $string; // <tag></tag>
Si vous devez également remplacer la partie, cette fonction est utile:
$var = "Nate";
$body = "Hey there {firstName} have you already completed your purchase?";
$newBody = replaceVariable($body,"{","}",$var);
echo $newBody;
function replaceVariable($body,$needleStart,$needleEnd,$replacement){
$start = strpos($body,$needleStart);
$end = strpos($body,$needleEnd);
return substr_replace($body,$replacement,$start,$end-$start+1);
}
Je devais remplacer une variable placée dans une zone de texte qui avait été soumise. J'ai donc remplacé firstName par Nate (y compris les accolades).
Si vous ne savez pas ce qu'il y a dans la balise <tag>
, il est possible qu'il y ait une autre balise <tag>
dans celle-ci, par exemple.
<tag>something<tag>something else</tag></tag>
Et si une fonction générique de remplacement de chaîne ne fera pas le travail.
Une solution plus robuste consiste à traiter la chaîne en tant que XML et à la manipuler avec DOMDocument
. Certes, cela ne fonctionne que si la chaîne est valide en tant que XML, mais je pense toujours que c'est une meilleure solution qu'une chaîne de remplacement.
$string = "<tag>i don't know what is here</tag>";
$replacement = "replacement";
$doc = new DOMDocument();
$doc->loadXML($str1);
$node = $doc->getElementsByTagName('tag')->item(0);
$newNode = $doc->createElement("tag", $replacement);
$node->parentNode->replaceChild($newNode, $node);
echo $str1 = $doc->saveHTML($node); //output: <tag>replacement</tag>