$string = "<tag>i dont know what is here</tag>" $string = str_replace("???", "<tag></tag>", $string); echo $string; // <tag></tag>
Итак, какой код я ищу?
$search = "/[^<tag>](.*)[^<\/tag>]/"; $replace = "your new inner text"; $string = "<tag>i dont know what is here</tag>"; echo preg_replace($search,$replace,$string);
выходы:
<tag>your new inner text</tag>
Общая функция:
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); }
DEMO
$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>
или просто?
$string = str_replace($string, "<tag></tag>", $string);
Извините, не смог удержаться. Возможно, вы обновите свой вопрос несколькими подробностями. 😉
Если «тег» изменяется:
$string = "<tag>i dont know what is here</tag>"; $string = preg_replace('|^<([az]*).*|', '<$1></$1>', $string) echo $string; // <tag></tag>
Если вы не знаете, что находится внутри <tag>
, возможно, существует еще один <tag>
например
<tag>something<tag>something else</tag></tag>
И поэтому общая функция замены строки не будет выполнять эту работу.
Более надежное решение – рассматривать строку как XML и манипулировать ею с помощью DOMDocument
. По общему признанию, это работает только в том случае, если строка действительна как XML, но я все же считаю, что это лучшее решение, чем замена строки.
$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>