给梦一个奔跑的方向!
PDF Print E-mail
User Rating: / 2
PoorBest 
Written by xlingfairy
Thursday, 17 December 2009 00:13
因为 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 的修改整理:
http://my.dajiaozi.com/joomla-modify.rar
 

Add comment


Security code
Refresh

Popular Contents

Recommend

Site Info

Members : 1
Content : 100
Web Links : 7
Content View Hits : 56502

Links