因为 joomla 的 readmore 功能,会把文章从 readmore 标志处断开,但是并没有检查截取的内容是否有未闭合的HTML,这样一来,在IE<=7 以下,就会因为某个HTML标签没有闭合而导致不可预料的错误。
正则表达式有 平衡组/递归匹配 的功能,但是写起来太麻烦,不容易写正确(而且看着也头疼)。
搜了一下,网上有一个简单的函数,通过比较左标签和右标签的数量来做的,但是运行之后,并没有正确的闭合,我就不在研究它了。
DOMDocument 有个 LoadHTML 函数,利用这个函数可以很完美的关闭未关闭的HTML。
function closeHTMLTag($str){
//$str = mb_convert_encoding($str,"utf8");
$str = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'.$str;
$dom = new DOMDocument("1.0","utf-8");
$dom->loadHTML( $str );
$str = $dom->saveXML();
$str = $dom->saveXML( $dom->getElementsByTagName('body')->item(0));
$str = preg_replace('/<body[^>]*>([\s\S]*?)<\/body>/i','\1',$str);
return $str;
}
这个函数用在Joomla 里正好。但实际应用时,你可能要做一点 字符编码 方面的改变。
另附 我对 joomla 的修改整理:
| < Prev | Next > |
|---|



