Мы можем попробовать использовать preg_replace_callback
здесь:
$input = "SOME TEXT HERE <strong>This product is the perfect \"fit\"</strong> SOME MORE TEXT HERE";
$output = preg_replace_callback(
"/<([^>]+)>(.*?)<\/\\1>/",
function($m) {
return str_replace("\"", "", $m[2]);
},
$input);
echo $output;
Это печатает:
SOME TEXT HERE This product is the perfect fit SOME MORE TEXT HERE
Используемый шаблон регулярных выражений делает следующее:
<([^>]+)> match an opening HTML tag, and capture the tag name
(.*?) then match and capture the content inside the tag
<\/\\1> finally match the same closing tag
Затем мы используем функцию обратного вызова, которая выполняет дополнительную замену для удаления всех двойных кавычек.
Обратите внимание, что в целом использование регулярных выражений для HTML является плохой практикой. Но если ваш текст содержит только одноуровневые / случайные HTML-теги, то решение, которое я дал выше, может оказаться жизнеспособным.