您知道如何使用 php 将 html 标签替换为空格字符吗?
如果我显示
strip_tags('<h1>Foo</h1>bar');
结果我得到“foobar”,但我需要保持单词分开的是“foo bar”。
您知道如何使用 php 将 html 标签替换为空格字符吗?
如果我显示
strip_tags('<h1>Foo</h1>bar');
结果我得到“foobar”,但我需要保持单词分开的是“foo bar”。
$string = '<h1>Foo</h1>bar';
$spaceString = str_replace( '<', ' <',$string );
$doubleSpace = strip_tags( $spaceString );
$singleSpace = str_replace( ' ', ' ', $doubleSpace );
尝试这个。
preg_replace('#<[^>]+>#', ' ', '<h1>Foo</h1>bar');
Preg replace 在大多数情况下都很好,有一个极端情况,如此处所述。这应该适用于两者:
strip_tags(str_replace('<', ' <', $str));
在任何标记前添加空格在 HTML 中是有效的。它也有一些警告,例如您的文本是否出于某种原因具有“<”并且不想在其前面添加空格。
我用来自 user40521 的示例帮助了我自己,但是我用与 php 的 strip_tags 相同的 api 制作了一个函数,它不使用多个变量,而且它还进行了修剪,因此从开始/结束删除了一个空格。
/**
* @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;
}
尝试这个:
$str = '<h1>Foo</h1>bar';
echo trim(preg_replace('/<[^>]*>/', ' ', $str));
preg_replace('#\<(.+?)\>#', ' ', $text);
回答有点晚,但试试这个,基本上选择 <> 内的所有内容,包括标签。
>
如果你知道这不会出现在你的任何属性中,这样的事情就会起作用。
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;
}
如果您依赖 strip_tags 这些嵌入属性,那么这将起作用。尝试这个 ...
function strip_tags_with_spacer(string $html, string $allowedTags) {
$allowedTagsArr=explode("<",strtolower(str_replace(">", "",$allowedTags)));
$tags=[];
$dom = new DOMDocument();
$dom->loadHTML($html);
$selector = new DOMXPath($dom);
$elements = $dom->getElementsByTagName('*');
foreach($elements as $child) $tags[$child->tagName]=$child->tagName;
foreach ( $tags as $tag ) {
if ( !in_array(strtolower($tag), $allowedTagsArr)) {
if ( in_array(strtolower($tag), ["p", "div", "h1", "h2", "h3", "h4", "pre", "body", "html", "form", "ul", "ol", "li", "table", "th", "td", "blockquote"])) $gap=" ";
else $gap="";
//echo "\nreplacing [$tag] with [$gap][$tag]";
$html = str_ireplace("</$tag", "$gap</$tag", $html);
}
}
return strip_tags($html, $allowedTags);
}
$result=strip_tags_with_spacer($str,"<button><b><u><i>");
请参阅http://sandbox.onlinephpfunctions.com/code/37299b1476dccb0631d404a073cf1c88f1cb7d2b
首先做一个 str_replace
$string = '<h1>Foo</h1>bar'
strip_tags(str_replace('</h1>', ' ',$string));