{"id":650,"date":"2008-06-08T18:41:08","date_gmt":"2008-06-08T18:41:08","guid":{"rendered":"http:\/\/fanhaijun.com\/?p=650"},"modified":"2008-06-08T18:41:08","modified_gmt":"2008-06-08T18:41:08","slug":"html-to-txt-part-1","status":"publish","type":"post","link":"https:\/\/fanhaijun.com\/?p=650","title":{"rendered":"HTML To TXT (Part 1)"},"content":{"rendered":"<p>\u4ee5\u4e0b\u662f\u5927\u5bcc\u7fc1cee\u5199\u7684\u4e00\u4e2a\u5b9e\u7528\u51fd\u6570\uff0c\u5b9e\u73b0HTML\u5230TXT\u683c\u5f0f\u7684\u8f6c\u6362\u3002<br \/>\u4ee5\u4e0b\u8fc7\u7a0b\u7ecf\u8fc7\u4e86\u51e0\u5e74\u7684\u65e0\u6570\u7684\u6d4b\u8bd5\uff0c\u7a33\u5b9a\u6027\u76f8\u5f53\u597d\u3002\u8f93\u51fa\u7684\u7ed3\u679c\u4e5f\u8f83\u7f8e\u89c2\u3002<\/p>\n<p>function&nbsp;HtmlToTxt(const&nbsp;HTMLText:string;MarkLinks:boolean):string;<br \/>const<br \/>&nbsp;&nbsp;CR=#13#10;<br \/>var<br \/>&nbsp;&nbsp;NextToken,s0:string;<br \/>&nbsp;&nbsp;i:integer;<br \/>&nbsp;&nbsp;HelpIdx:integer;<br \/>&nbsp;&nbsp;inQuot:boolean;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u53bb\u9664&lt;script&gt;\u6bb5\u4e4b\u7528<br \/>&nbsp;&nbsp;InputLen:integer;<br \/>&nbsp;&nbsp;InputIdx:integer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u6307\u5411\u8f93\u5165\u5b57\u7b26\u7684\u4e0b\u4e00\u4e2a\u5f85\u5904\u7406\u5b57\u7b26<br \/>&nbsp;&nbsp;inPre:boolean;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u8868\u793a\u662f\u5426\u5728&lt;pre&gt;&#8230;&lt;\/pre&gt;\u6bb5\u5185<br \/>&nbsp;&nbsp;CurrLink:string;<\/p>\n<p>&nbsp;&nbsp;function&nbsp;MakeStr(C:&nbsp;Char;&nbsp;N:&nbsp;Integer):&nbsp;string;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;N&nbsp;&lt;&nbsp;1&nbsp;then&nbsp;Result&nbsp;:=&nbsp;&#39;&#39;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin<br \/>&nbsp;&nbsp;{$IFNDEF&nbsp;WIN32}<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;N&nbsp;&gt;&nbsp;255&nbsp;then&nbsp;N&nbsp;:=&nbsp;255;<br \/>&nbsp;&nbsp;{$ENDIF&nbsp;WIN32}<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetLength(Result,&nbsp;N);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FillChar(Result[1],&nbsp;Length(Result),&nbsp;C);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;end;<\/p>\n<p>&nbsp;&nbsp;function&nbsp;NPos(const&nbsp;C:&nbsp;string;&nbsp;S:&nbsp;string;&nbsp;N:&nbsp;Integer):&nbsp;Integer;<br \/>&nbsp;&nbsp;var<br \/>&nbsp;&nbsp;&nbsp;&nbsp;I,&nbsp;P,&nbsp;K:&nbsp;Integer;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;0;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;K&nbsp;:=&nbsp;0;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;I&nbsp;:=&nbsp;1&nbsp;to&nbsp;N&nbsp;do&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P&nbsp;:=&nbsp;Pos(C,&nbsp;S);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(K,&nbsp;P);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(I&nbsp;=&nbsp;N)&nbsp;and&nbsp;(P&nbsp;&gt;&nbsp;0)&nbsp;then&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;K;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;P&nbsp;&gt;&nbsp;0&nbsp;then&nbsp;Delete(S,&nbsp;1,&nbsp;P)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Exit;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;end;<\/p>\n<p>&nbsp;&nbsp;function&nbsp;ReplaceStr(const&nbsp;S,&nbsp;Srch,&nbsp;Replace:&nbsp;string):&nbsp;string;<br \/>&nbsp;&nbsp;var<br \/>&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;Integer;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;Source:&nbsp;string;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;Source&nbsp;:=&nbsp;S;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;&#39;&#39;;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;repeat<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;:=&nbsp;Pos(Srch,&nbsp;Source);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;I&nbsp;&gt;&nbsp;0&nbsp;then&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;Result&nbsp;+&nbsp;Copy(Source,&nbsp;1,&nbsp;I&nbsp;&#8211;&nbsp;1)&nbsp;+&nbsp;Replace;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Source&nbsp;:=&nbsp;Copy(Source,&nbsp;I&nbsp;+&nbsp;Length(Srch),&nbsp;MaxInt);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Result&nbsp;:=&nbsp;Result&nbsp;+&nbsp;Source;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;until&nbsp;I&nbsp;&lt;=&nbsp;0;<br \/>&nbsp;&nbsp;end;<\/p>\n<p>&nbsp;&nbsp;function&nbsp;UnixToDos(const&nbsp;s:string):string;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;result:=AdjustLineBreaks(s);<br \/>&nbsp;&nbsp;end;<\/p>\n<p>&nbsp;&nbsp;\/\/&nbsp;\u53d6\u5f97\u4e0b\u4e00\u6bb5\u5b57\u7b26\u4e32<br \/>&nbsp;&nbsp;function&nbsp;GetNextToken(const&nbsp;s:string;&nbsp;const&nbsp;StartIdx:integer):string;<br \/>&nbsp;&nbsp;var<br \/>&nbsp;&nbsp;&nbsp;&nbsp;i:integer;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;StartIdx&gt;length(s)&nbsp;then<br \/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:=&#39;&#39;;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;result:=s[StartIdx];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;result=&#39;&#038;&#39;&nbsp;then<br \/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=StartIdx+1&nbsp;to&nbsp;length(s)&nbsp;do<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;s[i]&nbsp;in&nbsp;[&#39;&#038;&#39;,&#39;&nbsp;&#39;,#13,&#39;&lt;&#39;]&nbsp;then&nbsp;break;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:=result+s[i];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;s[i]=&#39;;&#39;&nbsp;then&nbsp;break;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end<br \/>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;result=&#39;&lt;&#39;&nbsp;then<br \/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=StartIdx+1&nbsp;to&nbsp;length(s)&nbsp;do<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:=result+s[i];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;s[i]=&#39;&gt;&#39;&nbsp;then&nbsp;break;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end<br \/>&nbsp;&nbsp;&nbsp;&nbsp;else<br \/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=StartIdx+1&nbsp;to&nbsp;length(s)&nbsp;do<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;s[i]&nbsp;in&nbsp;[&#39;&#038;&#39;,&#39;&lt;&#39;]&nbsp;then&nbsp;break<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;result:=result+s[i];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;end;<br \/>&nbsp;<br \/>&nbsp;&nbsp;\/\/&nbsp;\u8f93\u5165\uff1a&lt;a&nbsp;href=&quot;http:\/\/anjo.delphibbs.com&quot;&gt;<br \/>&nbsp;&nbsp;\/\/&nbsp;\u8f93\u51fa\uff1ahttp:\/\/anjo.delphibbs.com<br \/>&nbsp;&nbsp;function&nbsp;GetLink(s:string):string;<br \/>&nbsp;&nbsp;var<br \/>&nbsp;&nbsp;&nbsp;&nbsp;LPos,RPos,LQuot,RQuot:integer;<br \/>&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:=&#39;&#39;;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u53bb\u6389&#39;&#8230;.&lt;&#39;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;LPos:=pos(&#39;&lt;&#39;,s);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;LPos=0&nbsp;then&nbsp;exit;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;delete(s,1,LPos);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;s:=Trim(s);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u53bb\u6389&#39;&gt;&#8230;.&#39;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;RPos:=pos(&#39;&gt;&#39;,s);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;RPos=0&nbsp;then&nbsp;exit;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;delete(s,RPos,MaxInt);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;uppercase(copy(s,1,2))=&#39;A&nbsp;&#39;&nbsp;then<br \/>&nbsp;&nbsp;&nbsp;&nbsp;begin<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPos:=pos(&#39;HREF&#39;,uppercase(s));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;LPos=0&nbsp;then&nbsp;exit;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LQuot:=NPos(&#39;&quot;&#39;,s,1);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RQuot:=NPos(&#39;&quot;&#39;,s,2);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(LQuot&lt;LPos)&nbsp;or&nbsp;(RQuot&gt;RPos)&nbsp;then&nbsp;exit;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f00\u5934\u5e26&#39;#&#39;\u7684\u8d85\u94fe\u63a5\uff0c\u89c6\u4e3a\u65e0\u6548<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;s[LQuot+1]=&#39;#&#39;&nbsp;then&nbsp;exit;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5f00\u5934\u5e26&#39;javascript:&#39;\u7684\u8d85\u94fe\u63a5\uff0c\u4e5f\u89c6\u4e3a\u65e0\u6548<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5982\uff1a&lt;div&nbsp;align=right&gt;&lt;a&nbsp;href=&quot;javascript:window.close()&quot;&gt;&lt;IMG&nbsp;SRC=&quot;button_close.gif&quot;&gt;&lt;\/a&gt;&lt;\/div&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;copy(s,LQuot+1,11)=&#39;javascript:&#39;&nbsp;then&nbsp;exit;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:=copy(s,LQuot+1,RQuot-LQuot-1);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br \/>&nbsp;&nbsp;end;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u4e0b\u662f\u5927\u5bcc\u7fc1cee\u5199\u7684\u4e00\u4e2a\u5b9e\u7528\u51fd\u6570\uff0c\u5b9e\u73b0HTML\u5230TXT\u683c\u5f0f&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[104],"tags":[],"class_list":["post-650","post","type-post","status-publish","format-standard","hentry","category-technogy"],"_links":{"self":[{"href":"https:\/\/fanhaijun.com\/index.php?rest_route=\/wp\/v2\/posts\/650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fanhaijun.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fanhaijun.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fanhaijun.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fanhaijun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=650"}],"version-history":[{"count":0,"href":"https:\/\/fanhaijun.com\/index.php?rest_route=\/wp\/v2\/posts\/650\/revisions"}],"wp:attachment":[{"href":"https:\/\/fanhaijun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fanhaijun.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fanhaijun.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}