Подтвердить что ты не робот

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

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

Если я показываю

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

Я получаю как результат "foobar", но то, что мне нужно, чтобы сохранить слова отдельно, - "foo bar".

4b9b3361

Ответ 1

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

preg_replace('#<[^>]+>#', ' ', '<h1>Foo</h1>bar');

Ответ 2

$string      = '<h1>Foo</h1>bar';
$spaceString = str_replace( '<', ' <',$string );
$doubleSpace = strip_tags( $spaceString );
$singleSpace = str_replace( '  ', ' ', $doubleSpace );

Ответ 3

Замена предварительной замены в большинстве случаев, есть один угловой случай, как описано здесь. Это должно работать для обоих:

strip_tags(str_replace('<', ' <', $str));

Добавление пробела до того, как любой тег будет действителен в HTML. У него тоже есть некоторые предостережения, например, если ваш текст имеет "<" по какой-то причине и не хотите добавлять пространство перед этим.

Ответ 4

попробуйте следующее:

$str = '<h1>Foo</h1>bar';
echo trim(preg_replace('/<[^>]*>/', ' ', $str));

Ответ 5

Я помог себе с примером из user40521, но я создал функцию с тем же api, что и php strip_tags, он не использует несколько переменных, а также делает обрезку, поэтому одно пустое пространство удаляется из начала и конца.

/**
 * @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;
}

Ответ 6

Что-то вроде этого будет работать, если вы знаете, что > не будет ни в одном из ваших атрибутов.

preg_replace('/<[^>]+>/', ' ', 'hello<br>world');

Ответ 7

С помощью решения 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.

?>

Надеюсь, что это поможет!

Ответ 8

Вы можете попробовать

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

Ответ 9

preg_replace('#\<(.+?)\>#', ' ', $text);

Бит поздно с ответом, но попробуйте это, в основном выбирает все внутри < > включая теги.

Ответ 10

Сначала сделайте str_replace

$string = '<h1>Foo</h1>bar' 
strip_tags(str_replace('</h1>', ' ',$string));