我有一个看起来像这样的问题:
我的文本字符串如下:
<div>
content
<div>
<div>
content
<div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果你注意到我错过了一些div,当我在其他地方使用这些内容时,这可能会破坏我的主题.
解决这类问题的最佳方法是什么?这就是我自己拥有的,但往往不够好.此函数试图通过不修复它来解决问题,而是将其装入以防止破坏的html破坏我的其他html的可能性.
function ($string)
{
$div_open = substr_count($string, "<div");
$div_close = substr_count($string, "</div>");
while ($div_close<$div_open)
{
$string = "$string</div>";
$div_close = substr_count($string, "</div>");
if ($i>1000){echo 'pop 3'; exit;}else{$i++;}
}
while ($div_close>$div_open)
{
$string = "<div>$string";
$div_open = substr_count($string, "<div");
if ($i>1000){echo 'pop 4 '; exit;}else{$i++;}
}
return $string;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
清理HTML输出的非常可靠的方法是使用PHP的Tidy扩展.
您可以执行以下操作:
$text = '<div>content<div><div>content<div></div></div>';
$tidy = tidy_parse_string( $text );
$tidy->cleanRepair( );
echo $tidy;
Run Code Online (Sandbox Code Playgroud)
并且您的HTML输出将如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<div>content
<div>
<div>content</div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
还有很多你可以玩的Tidy设置,所以基本上由你决定你的输出会是什么样子.
缺点是Tidy有时喜欢做你真正不想看到的事情.如果你的HTML代码没有真正搞砸了,我推荐它.