¡¡¡¡Ã¿¸ö½øÐйý½Ï´óÐ͵ÄASP-WebÓ¦ÓóÌÐòÉè¼ÆµÄ¿ª·¢ÈËÔ±´ó¸Å¶¼ÓÐÈçϵľÀú£ºASP´úÂëÓëÒ³ÃæHTML»ìÏýÄÑ·Ö£¬ÒµÎñÂß¼ÓëÏÔʾ·½Ê½½ÊºÏ£¬Ê¹µÃ´úÂëÄÑÒÔÀí½â¡¢ÄÑÒÔÐ޸컳ÌÐò±àд±ØÐëÔÚÃÀ¹¤Ö®ºó£¬³ÉΪÏîĿƿ¾±£»ÕûºÏµÄ³ÌÐò´úÂëºÍHTML¾²Ì¬Ò³ÃæÊ±£¬»¨·Ñ´óÁ¿µÄʱ¼ä²ÅÄܵõ½ÀíÏëµÄЧ¹û£¬¼æ×÷ÁËÃÀ¹¤¡£µÄÈ·£¬Óýű¾ÓïÑÔ¿ª·¢WebÓ¦Óò»ÈÝÒ×½«Êý¾ÝµÄ´¦ÀíºÍÊý¾ÝµÄÏÔʾ·Ö¿ª£¬µ«ÔÚ¶àÈ˺Ï×÷µÄÇé¿öÏ£¬Èç¹ûÎÞ·¨½«Êý¾ÝºÍÏÔʾ·Ö¿ª£¬½«´ó´óÓ°Ï쿪·¢µÄЧÂÊ£¬×¨Òµ·Ö¹¤µÄ·¢»Ó¡£ ¡¡¡¡ÆäËüµÄ½Å±¾ÓïÑÔ£¬ÈçJSP¡¢PHP¶¼ÓÐ×Ô¼ºµÄ½â¾ö·½°¸£¬ASPµÄºóÒ»´ú²úÆ·ASP.NETҲʵÏÖÁË´úÂëÓëÒ³Ãæ£¬ËƺõÖ±½Ó¹ý¶Éµ½ASPÊDz»´íµÄÑ¡Ôñ¡£µ«ÊÇ×ÜÓÐÕâÑù»òÄÇÑùµÄÔÒòÈÃÎÒÃDz»ÄÜ»òÔÝʱ²»ÄÜ·ÅÆúASPÖ±±¼.NET´óÓª¡£´Ó¹«Ë¾½Ç¶ÈÀ´¿´£¬×ª»»ÓïÑÔÊÇÒ»±Ê²»ÉÙµÄͶ×Ê£¬°üÀ¨¹ÍÓ¶ÊìÊÖ.NET³ÌÐòÔ±¡¢ÅàѵÔÓгÌÐòÔ±¡¢¿ª·¢¹¤¾ßµÄתÐÍ¡¢¿ª·¢·ç¸ñµÄתÐÍ¡¢½çÃæ·ç¸ñת±ä¡¢½Ó¿Ú·ç¸ñ¡¢Èí¼þ¼Ü¹¹¡¢Îĵµ¡¢¿ª·¢Á÷³ÌµÈµÈ£»Õ⻹Òâζ×ÅÔÓеĴúÂë±ØÐëÔÚÐÂÓïÑÔ»·¾³ÀïÖØÐ´ÒÔʵÏÖ×î¼ÑµÄЧ¹ûºÍÎȶ¨ÐÔ£»Í¬Ê±½«Ö±½ÓÓ°ÏìÕâ¶Îʱ¼äÄÚÏîÄ¿µÄ½ø¶È£¬¸üÓпÉÄܵ¼Ö¸ö±ð³ÌÐòÔ±³ö×ß¡£ÓÉ´Ë¿´À´ÔÚÄú¾ö¶¨×ª»»ÓïÑÔ֮ǰ£¬ÔÚÔ»ù´¡ÉÏѰÇóÒ»ÖÖ½â¾ö·½°¸£¬²ÅÊÇ×îºÃµÄÑ¡Ôñ¡£ ¡¡¡¡PHPͨ¹ýÄ£°åʵÏÖ´úÂëÓëÒ³Ãæ£¬¿É¹©Ñ¡ÔñµÄÓÐFastTemplate¡¢PHPLIB¡¢SmartyµÈ¶àÖÖ£¬ÆäÖÐPHPLIBµÄÓ°Ïì×î´ó¡¢Ê¹ÓÃ×î¶à¡£¼ÈÈ»Èç´Ë£¬ÎÒÃÇÖ±½Ó°ÑËü°áµ½ASPÀ´£¬¶ÔÓÚͬʱʹÓÃPHPºÍASPµÄ¹«Ë¾»¹ÓкÜÓкô¦£ºÒ»¡¢ÃÀ¹¤´¦ÀíÒ³ÃæÊ±£¬²»¹Ü½«ÒªÌ×ÓÃPHP»¹ÊÇASP£¬´¦Àí·½Ê½ÊÇÒ»Ñù£¬ÎÞÐë¾¹ýÅàѵ£»¶þ¡¢³ÌÐòÔ±±àд´úÂëʱ£¬Á½ÖÖÓïÑÔ¼äµÄ˼·½Ó½ü»òÒ»Ö£¬Ïàͬ¹¦ÄÜÔÚÁ½ÖÖÓïÑÔʵÏÖʱ£¬Ö»Ð追±´¹ýÀ´ÂÔ×÷Ð޸ļ´¿É£¬±£Ö¤Á˹¤×÷ЧÂʺÍÏîÄ¿½ø¶È¡£ ¡¡¡¡1¡¢Ä£°åÀàµÄÉè¼Æ ¡¡¡¡ÊµÏÖ´úÂë·â×°³ÉΪģ°åÀ࣬¼´ÊÇΪÁËÓëPHPLIB¼æÈÝ£¬Ò²Ê¹µÃ´úÂë·½±ã¹ÜÀíÓëÀ©Õ¹¡£ ¡¡¡¡Ä£°åÀàҪʵÏÖµÄÄ¿±êΪ£º´ÓÄ£°åÎļþÖжÁÈëÏÔʾµÄHTML´úÂ룬½«ÕâЩÏÔʾ´úÂëÖÐÐèÒª¶¯Ì¬Êý¾ÝµÄµØ·½Ì滻ΪASP³ÌÐòÔËËãËùµÃ³öµÄÊý¾Ý£¬È»ºó°´ÕÕÒ»¶¨µÄ˳ÐòÊä³ö¡£ÆäÖУ¬Ìæ»»µÄ²¿·Ö¿ÉÒÔ×ÔÓɵÄÉ趨¡£Òò´ËËü±ØÐëÍê³ÉÈçÏÂÈÎÎñ£º ¡¤´ÓÄ£°åÎļþÖжÁÈ¡ÏÔʾÓõÄHTML´úÂë¡£ ¡¤½«Ä£°åÎļþºÍʵ¼ÊÉú³ÉµÄÊý¾Ý½áºÏ£¬Éú³ÉÊä³öµÄ½á¹û¡£ ¡¤ÔÊÐíͬʱ´¦Àí¶à¸öÄ£°å¡£ ¡¤ÔÊÐíÄ£°åµÄǶÌס£ ¡¤ÔÊÐí¶ÔÄ£°åÖеÄij¸öµ¥¶ÀµÄ²¿·Ö½øÐд¦Àí¡£ ¡¡¡¡ÊµÏÖ·½·¨£º ²ÉÓÃFSO¶Áȡģ°åÎļþ ²ÉÓÃÕýÔòÌæ»»ÊµÏÖÄ£°åÎļþºÍÊý¾ÝµÄ½áºÏ ´¦Àí¶à¸öÄ£°åÓÃÊý×é´æ´¢À´ÊµÏÖ¡£ Ä£°åµÄǶÌ×µÄʵÏÖÖ÷ÒªµÄÏë·¨ÊÇ£º½«Ä£°åºÍÊä³ö£¨ÈκÎÖмäµÄ·ÖÎö½á¹û£©Ò»ÊÓͬÈÊ£¬¶¼¿ÉÄÃÀ´×öÌæ»»£¬¼´¿ÉʵÏÖ¡£ µ¥¶À²¿·ÖµÄ´¦ÀíµÄͨ¹ýÔÚÄ£°åÎļþÖÐÉ趨±ê×¢£¬È»ºóÔÚÕýÔòÌæ»»ÖнáºÏ±ê×¢À´¿ØÖÆ£¬ÊµÏÖ²¿·ÖÌæ»»¡£ ¡¡¡¡2¡¢Ä£°åÀàµÄʵÏÖ ¡¡¡¡¸ø³ö¾ßÌå´úÂë֮ǰ£¬ÏȰÑÖ÷Òªº¯ÊýÁгö£¬ÓùýPHPLIBµÄÅóÓÑÓ¦¸Ã¶Ô´ËºÜÊìϤÁË£º ¡¡¡¡1£©Public Sub set_root(ByVal Value)¡¡É趨ģ°åĬÈÏĿ¼ ¡¡¡¡2£©Public Sub set_file(ByVal handle,ByVal filename)¡¡¶ÁÈ¡Îļþ ¡¡¡¡3£©Public Sub set_var(ByVal Name, ByVal Value, ByVal Append)¡¡ÉèÖÃÓ³ÉäÊý¾Ý-Ìæ»»±äÁ¿ ¡¡¡¡4£©Public Sub unset_var(ByVal Name)¡¡È¡ÏûÊý¾ÝÓ³Éä ¡¡¡¡5£©Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)¡¡ÉèÖÃÊý¾Ý¿é ¡¡¡¡6£©Public Sub set_unknowns(ByVal unknowns)¡¡É趨δָ¶¨Ó³ÉäµÄ±ê¼Ç´¦Àí·½Ê½ ¡¡¡¡7£©Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append)¡¡Ö´ÐÐÄ£°åÎļþÓëÊý¾ÝµÄ½áºÏ ¡¡¡¡8£©Public Sub p(ByVal Name)¡¡Êä³ö´¦Àí½á¹û ʵÏÖ´úÂ룺 <% '================================================================ ' CLASS NAME: kktTemplate ASPÒ³ÃæÄ£°å¶ÔÏó ' DESIGN BY : Åí¹ú»Ô ' DATE: 2004-07-05 ' WEBSITE: http://kacarton.yeah.net/ ' BLOG: http://blog.csdn.net/nhconch ' EMAIL: kacarton@sohu.com ' ' ±¾¶ÔÏóÖÐʹÓÃÁËset_var¡¢set_blockµÈÃüÃû·½·¨ÊÇΪÁ˼æÈÝphplib 'ÎÄÕÂΪ×÷ÕßÔ´´£¬×ªÔØÇ°ÇëÏÈÓë±¾ÈËÁªÏµ£¬×ªÔØÇë×¢Ã÷ÎÄÕ³ö´¦¡¢±£Áô×÷ÕßÐÅÏ¢£¬Ð»Ð»Ö§³Ö£¡ '================================================================ Class kktTemplate Private m_FileName, m_Root, m_Unknowns, m_LastError, m_HaltOnErr Private m_ValueList, m_BlockList Private m_RegExp ' ¹¹Ô캯Êý Private Sub Class_Initialize Set m_ValueList = CreateObject("Scripting.Dictionary") Set m_BlockList = CreateObject("Scripting.Dictionary") set m_RegExp = New RegExp m_RegExp.IgnoreCase = True m_RegExp.Global = True m_FileName = "" m_Root = "" m_Unknowns = "remove" m_LastError = "" m_HaltOnErr = true End Sub ' Îö¹¹º¯Êý Private Sub Class_Terminate Set m_RegExp = Nothing Set m_BlockMatches = Nothing Set m_ValueMatches = nothing End Sub Public Property Get ClassName() ClassName = "kktTemplate" End Property Public Property Get Version() Version = "1.0" End Property Public Sub About() Response.Write("kktTemplate ASPÒ³ÃæÄ£°åÀà<br>" & vbCrLf &_ "³ÌÐòÉè¼Æ£ºÅí¹ú»Ô 2004-07-05<br>" & vbCrLf &_ "¸öÈËÍøÕ¾£º<a href='http://kacarton.yeah.net'>http://kacarton.yeah.net</a><br>" & vbCrLf &_ "µç×ÓÓʼþ£º<a href='mailto:kacarton@sohu.com'>kacarton@sohu.com</a><br>") End Sub '¼ì²éĿ¼ÊÇ·ñ´æÔÚ Public Function FolderExist(ByVal path) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") FolderExist = fso.FolderExists(Server.MapPath(path)) Set fso = Nothing End Function '¶ÁÈ¡ÎļþÄÚÈÝ Private Function LoadFile() Dim Filename, fso, hndFile Filename = m_Root If Right(Filename, 1)<>"/" And Right(Filename, 1)<>"/" Then Filename = Filename & "/" Filename = Server.MapPath(Filename & m_FileName) Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FileExists(Filename) Then ShowError("Ä£°åÎļþ" & m_FileName & "²»´æÔÚ!") set hndFile = fso.OpenTextFile(Filename) LoadFile = hndFile.ReadAll Set hndFile = Nothing Set fso = Nothing If LoadFile = "" Then ShowError("²»ÄܶÁȡģ°åÎļþ" & m_FileName & "»òÎļþΪ¿Õ!") End Function '´¦Àí´íÎóÐÅÏ¢ Private Sub ShowError(ByVal msg) m_LastError = msg Response.Write "<font color=red style='font-size;14px'><b>Ä£°å´íÎó£º" & msg & "</b></font><br>" If m_HaltOnErr Then Response.End End Sub 'ÉèÖÃÄ£°åÎļþĬÈÏĿ¼ 'Ex: kktTemplate.set_root("/tmplate") ' kktTemplate.Root = "/tmplate" ' root = kktTemplate.get_root() ' root = kktTemplate.Root 'ʹÓÃÀàËÆset_rootÕâÑùµÄÃüÃû·½·¨ÊÇΪÁ˼æÈÝphplib£¬ÒÔϽ«²»ÔÙÖØ¸´ËµÃ÷ Public Sub set_root(ByVal Value) If Not FolderExist(Value) Then ShowError(Value & "²»ÊÇÓÐЧĿ¼»òĿ¼²»´æÔÚ!") m_Root = Value End Sub Public Function get_root() get_root = m_Root End Function Public Property Let Root(ByVal Value) set_root(Value) End Property Public Property Get Root() Root = m_Root End Property 'ÉèÖÃÄ£°åÎļþ 'Ex: kktTemplate.set_file("hndTpl", "index.htm") '±¾À಻֧³Ö¶àÄ£°åÎļþ£¬handleΪ¼æÈÝphplib¶ø±£Áô Public Sub set_file(ByVal handle,ByVal filename) m_FileName = filename m_BlockList.Add Handle, LoadFile() End Sub Public Function get_file() get_file = m_FileName End Function ' Public Property Let File(handle, filename) ' set_file handle, filename ' End Property ' Public Property Get File() ' File = m_FileName ' End Property 'ÉèÖöÔδָ¶¨µÄ±ê¼ÇµÄ´¦Àí·½Ê½£¬ÓÐkeep¡¢remove¡¢commentÈýÖÖ Public Sub set_unknowns(ByVal unknowns) m_Unknowns = unknowns End Sub Public Function get_unknowns() get_unknowns = m_Unknowns End Function Public Property Let Unknowns(ByVal unknown) m_Unknowns = unknown End Property Public Property Get Unknowns() Unknowns = m_Unknowns End Property Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name) Dim Matches m_RegExp.Pattern = "<!--/s+BEGIN " & BlockTag & "/s+-->([/s/S.]*)<!--/s+END " & BlockTag & "/s+-->" If Not m_BlockList.Exists(Parent) Then ShowError("δָ¶¨µÄ¿é±ê¼Ç" & Parent) set Matches = m_RegExp.Execute(m_BlockList.Item(Parent)) For Each Match In Matches m_BlockList.Add BlockTag, Match.SubMatches(0) m_BlockList.Item(Parent) = Replace(m_BlockList.Item(Parent), Match.Value, "{" & Name & "}") Next set Matches = nothing End Sub Public Sub set_var(ByVal Name, ByVal Value, ByVal Append) Dim Val If IsNull(Value) Then Val = "" Else Val = Value If m_ValueList.Exists(Name) Then If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) & Val _ Else m_ValueList.Item(Name) = Val Else m_ValueList.Add Name, Value End If End Sub Public Sub unset_var(ByVal Name) If m_ValueList.Exists(Name) Then m_ValueList.Remove(Name) End Sub Private Function InstanceValue(ByVal BlockTag) Dim keys, i InstanceValue = m_BlockList.Item(BlockTag) keys = m_ValueList.Keys For i=0 To m_ValueList.Count-1 InstanceValue = Replace(InstanceValue, "{" & keys(i) & "}", m_ValueList.Item(keys(i))) Next End Function Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append) If Not m_BlockList.Exists(BlockTag) Then ShowError("δָ¶¨µÄ ¿é±ê¼Ç" & Parent) If m_ValueList.Exists(Name) Then If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) & InstanceValue(BlockTag) _ Else m_ValueList.Item(Name) = InstanceValue(BlockTag) Else m_ValueList.Add Name, InstanceValue(BlockTag) End If End Sub Private Function finish(ByVal content) Select Case m_Unknowns Case "keep" finish = content Case "remove" m_RegExp.Pattern = "/{[^ /t/r/n}]+/}" finish = m_RegExp.Replace(content, "") Case "comment" m_RegExp.Pattern = "/{([^ /t/r/n}]+)/}" finish = m_RegExp.Replace(content, "<!-- Template Variable $1 undefined -->") Case Else finish = content End Select End Function Public Sub p(ByVal Name) If Not m_ValueList.Exists(Name) Then ShowError("²»´æÔڵıê¼Ç" & Name) Response.Write(finish(m_ValueList.Item(Name))) End Sub End Class %> ¡¡¡¡3¡¢Ê¹ÓÃÀý×Ó ¡¡¡¡ÏÂÃæ¾ÙÈý¸öÀý×Ó½øÐÐ˵Ã÷¡£ ¡¡¡¡1)¼òµ¥µÄÖµÌæ»» ¡¡¡¡Ä£°åÎļþΪmyTemple.tpl£¬ÄÚÈÝ£º <html><title>ASPÄ£°å¼òµ¥Ìæ»»</title><body> ×£ºØ£¡ÄãÓ®ÁËÒ»Á¾{some_color}·¨ÀÀû£¡ </body> ÏÂÃæÊÇASP´úÂ루kktTemplate.inc.asp¾ÍÊÇÉÏÃæ¸ø³öµÄÄ£°åÀࣩ£º <!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"--> <% dim my_color, kkt my_color = "ºìÉ«µÄ" set kkt = new kktTemplate '´´½¨Ä£°å¶ÔÏó kkt.set_file "hndKktTemp", "myTemple.tpl" 'ÉèÖò¢¶Áȡģ°åÎļþmyTemple.tpl kkt.set_var "some_color", my_color, false 'ÉèÖÃÄ£°å±äÁ¿ some_color = my_colorµÄÖµ kkt.parse "out", "hndKktTemp", false 'Ä£°å±äÁ¿ out = ´¦ÀíºóµÄÎļþ kkt.p "out" 'Êä³öoutµÄÄÚÈÝ set kkt = nothing 'Ïú»ÙÄ£°å¶ÔÏó %> Ö´ÐкóÊä³öΪ£º <html><title>ASPÄ£°å¼òµ¥Ìæ»»</title><body> ×£ºØ£¡ÄãÓ®ÁËÒ»Á¾ºìÉ«µÄ·¨ÀÀû£¡ </body> 2)Ñ»·¿éÑÝʾÀý×Ó
Ä£°åÎļþmyTemple2.tpl£º <html><title>ASPÄ£°å£¿éµÄÑÝʾ</title><body> <table cellspacing="2" border="1"><tr><td>ÏÂÃæµÄ¶¯ÎïÄúϲ»¶ÄÄÒ»ÖÖ</td></tr> <!-- BEGIN AnimalList --> <tr><td><input type="radio" name="chk">{animal}</td></tr> <!-- END AnimalList --> </table> </body> ASP´úÂ룺 <!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"--> <% dim animal, kkt, i animal = Array("СÖí","С¹·","Сǿ") set kkt = new kktTemplate kkt.set_file "hndKktTemp", "myTemple2.tpl" kkt.set_block "hndKktTemp", "AnimalList", "list" for i=0 to UBound(animal) kkt.set_var "animal", animal(i), false kkt.parse "list", "AnimalList", true next kkt.parse "out", "hndKktTemp", false kkt.p "out" set kkt = nothing %> Ö´Ðнá¹û£º <html><title>ASPÄ£°å£¿éµÄÑÝʾ</title><body> <table cellspacing="2" border="1"><tr><td>ÏÂÃæµÄ¶¯ÎïÄúϲ»¶ÄÄÒ»ÖÖ</td></tr> <tr><td><input type="radio" name="chk">СÖí</td></tr> <tr><td><input type="radio" name="chk">С¹·</td></tr> <tr><td><input type="radio" name="chk">Сǿ</td></tr> </table> </body> 3)ǶÌ׿éÑÝʾ Ä£°åÎļþmyTemple3.tpl£º <html><title>ASPÄ£°å£Ç¶Ì׿éÑÝʾ</title> <body><table width="400" border="1" bordercolor="#000000"> <tr><td><div align="center">{myname}²âÊÔ</div></td></tr> <tr><td>Îҵֲ͝ÎïÔ°£º</td> </tr> <!-- BEGIN animalList --> <tr><td>{animal}</td></tr> <!-- BEGIN plantList --> <tr><td> {plant}</td></tr> <!-- END plantList --> <!-- END animalList --> </table> </body> </html> ASP´úÂ룺 <!--#INCLUDE VIRTUAL="kktTemplate.inc.asp"--> <% dim my_color, kkt, myname, animal, plant set kkt = new kktTemplate myname = "kktTemplate block test..." animal = array("¶¯Îï", "Ö²Îï") plant = array(array("СÖí","С°×","Сǿ"), array("õ¹å","ÏòÈÕ¿û")) kkt.set_file "hndKktTemp", "myTemple3.tpl" kkt.set_var "myname", myname, false kkt.set_block "hndKktTemp", "animalList", "a" kkt.set_block "animalList", "plantList", "p" for i=0 to UBound(animal) kkt.set_var "animal", animal(i), False kkt.unset_var "p" 'kkt.set_var "p", "", false for j=0 to UBound(plant(i)) kkt.set_var "plant", plant(i)(j), false kkt.parse "p", "plantList", true next kkt.parse "a", "animalList", true next kkt.parse "out", "hndKktTemp", false kkt.p "out" %> Ö´Ðнá¹û£º <html><title>ASPÄ£°å£Ç¶Ì׿éÑÝʾ</title> <body><table width="400" border="1" bordercolor="#000000"> <tr><td><div align="center">kktTemplate block test...²âÊÔ</div></td></tr> <tr><td>Îҵֲ͝ÎïÔ°£º</td> </tr> <tr><td>¶¯Îï</td></tr> <tr><td> СÖí</td></tr> <tr><td> С°×</td></tr> <tr><td> Сǿ</td></tr> <tr><td>Ö²Îï</td></tr> <tr><td> õ¹å</td></tr> <tr><td> ÏòÈÕ¿û</td></tr> </table> </body> </html> ¡¡¡¡±¾ÎÄÌá¼°µÄËùÓдúÂë¿É´Ó´Ë´¦ÏÂÔØ£ºhttp://www.freewebs.com/kacarton/web/kktTemplate.rar(3.53K) ¡¡¡¡4¡¢Ð¡½á ¡¡¡¡±¾ÎÄÖ÷Òª½éÉÜÁË»ùÓÚASPÀûÓÃÄ£°åÀàʵÏÖ´úÂëÓëÒ³Ãæ·ÖÀëµÄ·½·¨£¬µ±È»»¹ÓÐÆäËü¸üºÃµÄ½â¾ö·½°¸¡£±¾ÎÄÖ¼ÔÚÅ×שÒýÓñ¸÷λ¶ÁÕß¡¢WEB¿ª·¢²ÎÓë½øÀ´£¬¶àÌᱦ¹óÒâ¼û£¬¶à×÷½»Á÷£¬¹²Í¬½ø²½£¡
|