strip_tags()....用空格替换标签而不是删除它们

时间:2012-10-10 17:22:50

标签: php

你知道怎么用PHP用空格字符替换html标签吗?

如果我显示

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

我得到的结果是“foobar”但是我需要保持单词分开是“foo bar”。

10 个答案:

答案 0 :(得分:43)

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

答案 1 :(得分:35)

试试这个。

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

答案 2 :(得分:14)

在大多数情况下,Preg替换很好,有一个角落的情况,如这里所讨论的。这应该适用于:

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

在任何标记之前添加空格在HTML中有效。它也有一些警告,如果你的文字有“&lt;”出于某种原因,不想在它之前添加空间。

答案 3 :(得分:5)

试试这个:

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

答案 4 :(得分:2)

我通过user40521的示例帮助我自己,但我使用与php的strip_tags相同的api创建了一个函数,它不使用多个变量,并且它还进行修剪,因此从开始/结束中删除了一个空格。 / p>

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

答案 5 :(得分:1)

如果您知道>不属于您的任何属性,则此类内容将起作用。

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

答案 6 :(得分:1)

使用正则表达式解决方案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.

?>

希望它有所帮助!

答案 7 :(得分:1)

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

回答迟到但尝试这个,基本上选择里面的所有内容&lt;&gt;包括标签。

答案 8 :(得分:0)

你可以尝试

$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 :(得分:-3)

首先做一个str_replace

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