By dknt From bbs.blueidea.com
搜了搜這個,發現找不到答案。所以自己寫了一個,很多程式繞過這個問題,往往人工來決定在何處截斷,太麻煩了。
實現內容:截斷一段含有HTML代碼的文本,但是不會出現圍堵標記沒有封閉的問題。
一個PHP版本的在這裡!: 自動產生文章摘要[PHP版本]。
核心部分如下:複製代碼 代碼如下:function Generate_Brief(text,length){
if(text.length < length) return text;
var Foremost = text.substr(0,length);
var re = /<(\/?)(BODY|SCRIPT|P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)/ig;
var Singlable = /BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT/i
var Stack = new Array(), posStack = new Array();
while(true){
var newone = re.exec(Foremost);
if(newone == null) break;
if(newone[1] == ""){
var Elem = newone[2];
if(Elem.match(Singlable) && newone[3]!= ""){
continue;
}
Stack.push(newone[2].toUpperCase());
posStack.push(newone.index);
if(newone[3] == "") break;
}else{
var StackTop = Stack[Stack.length-1];
var End = newone[2].toUpperCase();
if(StackTop == End){
Stack.pop();
posStack.pop();
if(newone[3] == ""){
Foremost = Foremost+">";
}
}
};
}
var cutpos = posStack.shift();
Foremost = Foremost.substring(0,cutpos);
return Foremost;
}
測試案例如下: <br />[input] truncate as <input id="Length" type="text" size="10" style="text-align:center" value="500"> charactors</p><p><textarea name="Original" cols="100" rows="10 </p><p><b style=" red>本文的任何文字和圖片都不容許以任何方式轉載,違者將訴諸法律手段處理!!!請嚴肅對待!</p><p align="center"><b>;<br /></b></p><p>這位是娃娃,他是我弟弟。是一隻很酷又非常可愛的小狗。 </p></p><p>他今年已經兩歲了,雖然個頭很小,但是氣勢一點也不遜色大狗。非常敢於同惡勢力作鬥爭</p><p>娃娃的顯著特點就是可愛,尤其是把耳朵背在後面的時候顯得特別可愛,彷彿一隻乖巧的小貓咪。他還會站起來跳舞,比如你要給他什麼好吃的時候他就會這樣做。畢竟這是他的一種賴以謀生的工作方式,這年頭,不會點技術能有飯吃嗎。</p><p>他還有一個特點就是很酷,儘管我們是兄弟,但是他從來沒有巴結我們人類的臭毛病。午後,當燦爛的陽光透過窗子照射進來,娃娃會自己找到合適的位置,趴在地板上,讓光束盡情地撫摸他。他的臥姿是那麼的安詳而威嚴,彷彿一位神聖的詩人,頷輕輕的抬起望著窗外陷入無盡的沉思,眼中閃耀著聖徒般的光芒。當你輕輕的從他身邊走過,他會悠閑的轉過頭來看看你,用一種冷漠而平靜的眼光,然後又將頭轉向原來的方向,頷再次輕輕的抬起,沉浸著,迷戀著...</p><p>他是那麼可憐,作為一個溫室小狗他每天只能呆在家裡睡覺或者淘氣。他的生活是那麼的空洞,那麼的乏味,那麼的無奈。因為智力的問題,他經常做一些傻事,也常常直接或間接的傷到自己(直接就是吃了大東西卡住嗓子之類的,間接就是到處撒尿被我收拾了)。但是這又能怨他嗎?他又不是自己想那麼傻的。智商不高是上天決定的,他也控制不了的。娃娃是那麼的傻,一隻純粹的傻狗,我終究沒能教會他C語言編程。</p><p>娃娃是講義氣而且很重感情的,當你傷心的時候他會緩緩走過你身邊,他用那種關懷的眼神看著你,彷彿在用墨西哥語說"What can I do for you?"。當你在將要離開家的前一個晚上,他又會走到你的床前,你把他抱起來,他會眼淚汪汪的看著你,飽含深情讓你久久不能入睡</p><p>傻娃娃,現在不在我身邊了,我很想念他。</p><p>下面是傻娃娃的表情SHOW!!!</p><p align="center"></p><p align="center">舉頭望明月</p><p align="center"></p><p align="center">"哼,為什麼欺負我,討厭"</p><p align="center"></p><p align="center">"呀,慘了,這下可怎麼辦啊,下不去了..."</p><p align="center"></p><p align="center">"唉,愁啊,真沒辦法."</p><p align="center"></p><p align="center">"嗚嗚,我好可憐啊,放了我吧,我都要哭了,好傷感阿..."</p><p align="center"></p><p align="center">"喂!怎麼的你!跟你說話沒聽著啊!"</p><p align="center"></p><p align="center">"呵,小樣的,你活膩歪了吧!"</p><p align="center"></p><p align="center">"嘿!我是兇惡的大老虎!"</p><p>[briefing] <input type="button" value="Get Briefing" onclick="Do()"><textarea id="Brief" cols="100" rows="10">