Intereting Posts
Разбирайте все ссылки, которые содержат определенное слово в теге «href» Преобразование из файла в растровое изображение в android ModX Evo: ошибка PHP в документе document.parser.class.inc.php ZF2: автозагрузка библиотек без пространств имен Неправильная подсветка синтаксиса для файла PHP в PHPStorm Что неожиданный T_VARIABLE в PHP? json_decode И json_encode длинные целые числа без потери данных Два разных языка PHP и Java в одном приложении с PHP на Apache и Java на Tomcat Как установить поле объекта, которое не существует в таблице, но существует в необработанном SQL как псевдоним? сравнение результатов запроса SimpleXML – echo / print_r возвращает разные значения расширение laravel 5 встроенной аутентификации для входа в систему только "если пользователь == активен" Навигация по ajax не работает после перезаписи htaccess Синхронизация базы данных Online / Offline – MySQL / PHP Ошибка мыла, Кодирование: объект не имеет свойства «RecordId»

Просто: как заменить «все между» на php?

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