P粉3230507802023-09-03 16:42:37
没有合理的方法来保存像您发布的内容一样损坏的文档,但假设您将文本中的 >
和类似字符替换为其相关实体,例如: > ;
,您可以将要接受的文档放入适当的库中,例如 DomDocument 将处理剩下的事情。
$input = <<<_E_ < div class='test' >1 > 0 is < b >true</ b> and apples >>> bananas< / div > _E_; $input = preg_replace([ '#<\s+#', '#</\s+#' ], [ '<', '</' ], $input); $d = new DomDocument(); $d->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); var_dump($d->saveHTML());
输出:
string(80) "<div class="test">1 > 0 is <b>true</b> and apples >>> bananas</div>"
P粉0644484492023-09-03 11:17:47
这个正则表达式也有效:
它将 HTML 标记中的有效部分分为四个部分,并用其替换其余部分(空格)。
/(<)\s*(\/?)\s*([^<>]*\S)\s*(>)/g
(<)<)
- 捕获起始尖括号(第 1 节)\s*
- 匹配任何空格(\/?)
- 捕获可选的反斜杠(第 2 部分)\s*
- 匹配反斜杠后的任何空格([^<>]*\S)
- 捕获标签内的内容,不带尾随空格(第 3 节)\s*
- 匹配内容后面和右尖括号之前的空格(>)
- 捕获右尖括号(第 4 节)const reg = /(<)\s*(\/?)\s*([^<>]*\S)\s*(>)/g const str = "< div class='test' >1 > 0 is < b >true< / b > and apples >>> bananas< / div >" const newStr = str.replace(reg, ""); console.log(newStr);