你知道怎么用PHP用空格字符替换html标签吗?
如果我显示
strip_tags('<h1>Foo</h1>bar');
我得到的结果是“foobar”但是我需要保持单词分开是“foo bar”。
答案 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));