Intereting Posts

strip_tags () … заменять теги пробелом, а не удалять их

Вы знаете, как заменить теги html символом пробела, используя php?

Если я покажу

strip_tags('<h1>Foo</h1>bar'); 

Я получаю как результат «foobar», но то, что мне нужно, чтобы держать слова отдельно, – «foo bar».

Related of "strip_tags () … заменять теги пробелом, а не удалять их"

Попробуй это.

 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));