Вы знаете, как заменить теги html символом пробела, используя php?
Если я покажу
strip_tags('<h1>Foo</h1>bar');
Я получаю как результат «foobar», но то, что мне нужно, чтобы держать слова отдельно, – «foo bar».
Попробуй это.
preg_replace('#<[^>]+>#', ' ', '<h1>Foo</h1>bar');
$string = '<h1>Foo</h1>bar'; $spaceString = str_replace( '<', ' <',$string ); $doubleSpace = strip_tags( $spaceString ); $singleSpace = str_replace( ' ', ' ', $doubleSpace );
Предварительная замена в большинстве случаев прекрасна, есть один угловой случай, как описано здесь. Это должно работать как для:
strip_tags(str_replace('<', ' <', $str));
Добавление пространства до того, как любой тег будет действителен в HTML. У него тоже есть некоторые предостережения, например, если ваш текст имеет «<» по какой-то причине и не хочет добавлять перед ним пробел.
попробуй это:
$str = '<h1>Foo</h1>bar'; echo trim(preg_replace('/<[^>]*>/', ' ', $str));
Я помог себе с примером из user40521, но я сделал функцию с такими же api, как и strip_tags php, она не использует несколько переменных, а также делает обрезку, поэтому из пула / конца удаляется одно пустое пространство.
/** * @param string $string * @param string|null $allowable_tags * @return string */ function strip_tags_with_whitespace($string, $allowable_tags = null) { $string = str_replace('<', ' <', $string); $string = strip_tags($string, $allowable_tags); $string = str_replace(' ', ' ', $string); $string = trim($string); return $string; }
Что-то вроде этого будет работать, если вы знаете, что >
не будет ни в одном из ваших атрибутов.
preg_replace('/<[^>]+>/', ' ', 'hello<br>world');
С помощью решения Regex preg_replace('/<[^>]*>/', ' ', $str)
, это не сработает, если у вас есть атрибуты событий, например:
<button onclick="document.getElementById('alert').innerHTML='<strong>MESSAGE</strong>';"> click</button>
Вам нужно сделать еще одну замену:
<?php $str = "<div data-contents=\"<p>Hello!</p>\">Hi.</div>". "Please<button onclick=\"document.getElementById('alert').innerHTML='". "<strong>MESSAGE</strong>';\">click</button>here."; $event = "onafterprint|onbeforeprint|onbeforeunload|onerror|onhaschange|onload|onmessage|". "onoffline|ononline|onpagehide|onpageshow|onpopstate|onresize|onstorage|onunload|". "onblur|onchange|oncontextmenu|onfocus|oninput|oninvalid|onreset|onselect|onsubmit|". "onkeydown|onkeypress|onkeyup|onclick|ondblclick|ondrag|ondragend|ondragenter|". "ondragleave|ondragover|ondragstart|ondrop|onmousedown|onmouseenter|onmousemove|". "onmouseleave|onmouseout|onmouseover|onmouseup|onscroll|onabort|oncanplay|". "oncanplaythrough|oncuechange|ondurationchange|onemptied|onended|onerror|". "onloadeddata|onloadedmetadata|onloadstart|onpause|onplay|onplaying|onprogress|". "onratechange|onseeked|onseeking|onstalled|onsuspend|ontimeupdate|onvolumechange|". "onwaiting|data-[^=]+"; $str = preg_replace("/<([^>]+)(".$event.")=(\"|')(?:(?!\\3).)+\\3/", "<$1", $str); $str = preg_replace("/<[^>]*>/", " ", $str); echo $str; // with only strip_tags: // Hi.Pleaseclickhere. // with event and data attributes removal + regex tags removal: // Hi. Please click here. // with only regex tags removal: // Hello! ">Hi. Please MESSAGE ';">click here. ?>
Надеюсь, поможет!
Можешь попробовать
$str = '<h1>Foo</h1>bar'; var_dump(replaceTag($str,array("h1"=>"div")));
Вывод
string '<div>Foo</div>bar' (length=17)
Используемая функция
function replaceTag($str,$tags) { foreach ( $tags as $old => $new ) $str = preg_replace("~<(/)?$old>~", "<\\1$new>", $str); return $str; }
preg_replace('#\<(.+?)\>#', ' ', $text);
Бит поздно с ответом, но попробуйте это, в основном выбирает все внутри <>, включая теги.
Сначала сделайте str_replace
$string = '<h1>Foo</h1>bar' strip_tags(str_replace('</h1>', ' ',$string));