為自己的ASP網(wǎng)站系統(tǒng)構(gòu)建一套標(biāo)記語(yǔ)言
作為動(dòng)態(tài)網(wǎng)站在建設(shè)過(guò)程中難免遇到在線編輯文章的問(wèn)題。HTML提供了一個(gè)textarea標(biāo)記,但是實(shí)際上沒(méi)有解決這個(gè)問(wèn)題,因?yàn)閺膖extarea的是純文本。除非在輸入的時(shí)候使用了HTML標(biāo)記,否則在輸出的時(shí)候?qū)@得從頭到尾毫無(wú)結(jié)構(gòu)的一盤文字。WEB設(shè)計(jì)中通過(guò)DHTML構(gòu)建一類所見(jiàn)即所得的在線編輯器對(duì)這個(gè)問(wèn)題有了很好的解決。
但是所見(jiàn)即所得并不是唯一的解決辦法。筆者在上網(wǎng)過(guò)程中發(fā)現(xiàn)一些門戶網(wǎng)站的在線編輯器非常有特色。它并不是所見(jiàn)即所得(但是提供了一個(gè)預(yù)覽功能),而是一個(gè)textarea的文本域,但是又不支持HTML標(biāo)記語(yǔ)言。而是有它自己的一套標(biāo)記語(yǔ)言。
圖1
圖2
筆者使用覺(jué)得非常流暢,總結(jié)其優(yōu)點(diǎn)如下:
第一, 它的標(biāo)記不多,相對(duì)于HTML而言非常簡(jiǎn)單,而且通過(guò)回車可以自動(dòng)生成段落,容易被一般用戶所接受。筆者認(rèn)為如果使用中文標(biāo)記,可以被更多國(guó)內(nèi)用戶接受。
第二, 相對(duì)所見(jiàn)即所得的編輯器而言用戶更能掌握自己的文章結(jié)構(gòu),生成亂碼少。
第三, 可見(jiàn)性相對(duì)于HTML而言要好得多,加上預(yù)覽功能后更佳。
第四, 由于自己的標(biāo)記語(yǔ)言不支持腳本,因而是更安全的.
經(jīng)過(guò)筆者一番思考和實(shí)踐,現(xiàn)把構(gòu)建這種屬于自己的標(biāo)記語(yǔ)言的方法公示:
首先,我們?yōu)樽约旱木W(wǎng)站確定一套簡(jiǎn)單而必要的標(biāo)記語(yǔ)言。確定時(shí)把一些不必要的省略。拿我而言,我為自己的網(wǎng)站確定的標(biāo)記語(yǔ)言如下:
[圖片]圖片的網(wǎng)址[/圖片]
[大標(biāo)題]文字內(nèi)容[/大標(biāo)題]
[小標(biāo)題]文字內(nèi)容[/小標(biāo)題] (考慮到用戶可能會(huì)細(xì)分所以加上)
[粗體]文字內(nèi)容[/粗體]
[斜體]文字內(nèi)容[/斜體]
[鏈接]網(wǎng)址[/鏈接]
然后,提供一定的機(jī)制,讓瀏覽器讀懂我們的標(biāo)記.那么,怎么讓瀏覽器讀懂我們自己確定的標(biāo)記呢? 在內(nèi)容顯示的頁(yè)面,我們需要寫一個(gè)程序?qū)⑽覀兊乃袠?biāo)記翻譯成為標(biāo)準(zhǔn)的HTML標(biāo)記,但是此前必須過(guò)濾掉用戶輸進(jìn)來(lái)的HTML代碼。
第一步:過(guò)濾HTML代碼.
這個(gè)其實(shí)很簡(jiǎn)單,只要將所有的 “<” 標(biāo)簽替換為 “<” ,另外把所有 “>” 替換為 “>” 就可以了。在ASP中通過(guò)如下語(yǔ)句實(shí)現(xiàn):
Content=replace(content,”<”,”<”)
Content=replace(content,”>”,”>”)
(以上代碼中,content是儲(chǔ)存了我們要顯示的內(nèi)容的變量,下文中若出現(xiàn)也表示一樣的意思。)
第二步:將我們的標(biāo)記翻譯為HTML
這個(gè)相對(duì)復(fù)雜一些,因?yàn)椴⒉皇呛?jiǎn)單的將所有[標(biāo)簽替換為<和]替換為>然后將里面的中文(比如圖片)翻譯為英文(比如IMG)就可以的。原因有兩個(gè):
1 是我們的標(biāo)記里面的內(nèi)容,根據(jù)不同的分類需要做不同的處理:
第一類,直接顯示給用戶的,比如:
[大標(biāo)題]文字[/大標(biāo)題]
此時(shí)確實(shí)是只要將標(biāo)簽翻譯成相應(yīng)的英文,比如上面的標(biāo)記翻譯為<h1>文字</h1>就可以了.
第二類,不直接呈現(xiàn)給用戶的,比如:
[圖片]圖片網(wǎng)址[/圖片]
此時(shí),標(biāo)簽中間的內(nèi)容”圖片網(wǎng)址”只是我們要顯示的網(wǎng)址,在HTML中是作為<IMG>標(biāo)簽的SRC屬性,而且這個(gè)標(biāo)簽在HTML中是不要結(jié)尾標(biāo)簽的.所以直接翻譯的結(jié)果是肯定錯(cuò)誤的.
第三類,直接呈現(xiàn)同時(shí)又作為屬性,比如:
[鏈接]網(wǎng)址[/鏈接]
2 是并非所有出項(xiàng)標(biāo)記的地方都是要翻譯的,比如,有時(shí)候用戶需要用符號(hào)”[“和符號(hào)”]”來(lái)表現(xiàn)他們的內(nèi)容,而這時(shí)候如果將這樣的標(biāo)記翻譯為”<”和”>”肯定不是符合用戶的心意的。
分析了出現(xiàn)的問(wèn)題,筆者將在下面給出編寫程序的思路參考和一個(gè)參考的程序.
由于不同的標(biāo)簽需要的翻譯方式不一樣,所以必須針對(duì)不同的標(biāo)簽,一個(gè)個(gè)的翻譯.
對(duì)于任何單個(gè)的標(biāo)記,一篇文章內(nèi)可能出現(xiàn)多此,也可能一次也不出現(xiàn),程序應(yīng)當(dāng)從頭到尾首先檢查某一標(biāo)記的開(kāi)始標(biāo)記(比如對(duì)”圖片]圖片地址[/圖片]”是”[圖片]”)出現(xiàn)的位置,一旦檢查到了,然后從那個(gè)位置開(kāi)始檢查結(jié)束標(biāo)記,如果也檢查到了,則說(shuō)明這是我們要的標(biāo)記;如果結(jié)束標(biāo)記沒(méi)有檢查到,那么說(shuō)明那不是我們要的標(biāo)記,而只是用戶自己展示的內(nèi)容。檢查到之后,將標(biāo)記翻譯為HTML標(biāo)記,并根據(jù)不同類型對(duì)標(biāo)記中的內(nèi)容作不同的處理.坐完以后從結(jié)束標(biāo)記的位置又繼續(xù)檢查,直到文章結(jié)束。
實(shí)際編寫中,需要用到遞歸的思想.下面給出翻譯[圖片]圖片地址[/圖片]這個(gè)標(biāo)記的范例程序.
| Function TranslateImg(Str) Start=instr(str,”[圖片]”) ‘檢查標(biāo)記的開(kāi)始位置 If start=0 then exit function ‘開(kāi)始位置為0,表示沒(méi)有這個(gè)標(biāo)記,那么程序結(jié)束 End=instr(start,str,”[/圖片]” ‘檢查繼該開(kāi)始位置之后所出現(xiàn)的結(jié)束標(biāo)記位置 If end=0 then exit function ‘結(jié)束標(biāo)記出現(xiàn)位置為0,表示沒(méi)有結(jié)束標(biāo)記,程序結(jié)束 MidStr=mid(str,start+4,end-start-4) ‘標(biāo)記中間的內(nèi)容 ReplaceStr=mid(str,start,end-start+5) ‘標(biāo)記中間的內(nèi)容加上標(biāo)記,作為將要替換的內(nèi)容 Str=replace(instr,ReplaceStr,”<img src=”&MidStr&”>”) ‘將標(biāo)記翻譯為HTML TranslateImg Str ‘遞歸執(zhí)行該函數(shù) End Function |
通過(guò)以上分析,相信讀者能夠通過(guò)自己的分析為自己的網(wǎng)站構(gòu)建一套”MyHTML”標(biāo)記語(yǔ)言了。
在實(shí)際的開(kāi)發(fā)中還會(huì)有一些課題需要攻破,比如:標(biāo)記嵌套的處理;是在將用戶提交到數(shù)據(jù)庫(kù)之前就翻譯還是待用戶瀏覽文章從數(shù)據(jù)庫(kù)中調(diào)出來(lái)時(shí)才翻譯;為用戶提供一些自動(dòng)插入標(biāo)記的按鈕方便用戶的操作體驗(yàn)登.本文僅作拋磚引玉之用希望引得讀者一點(diǎn)欣賞。
相關(guān)文章
.Net基于MVC4 Web Api輸出Json格式實(shí)例
這篇文章主要介紹了.Net基于MVC4 Web Api輸出Json格式的實(shí)現(xiàn)方法,實(shí)例講述了Global中json的操作與XML的處理等技巧,需要的朋友可以參考下2014-10-10
利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息的實(shí)現(xiàn)方法
這篇文章主要介紹了利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息,其中主要注意的是,我們傳遞的圖片數(shù)據(jù)需要采用Base64String的格式才能正常傳遞和展示,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
ashx介紹以及ashx文件與aspx文件之間的區(qū)別
這篇文章主要介紹了ashx以及ashx文件與aspx文件之間的區(qū)別。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12
asp.net下 jquery jason 高效傳輸數(shù)據(jù)
jquery jason 高效傳輸數(shù)據(jù)轉(zhuǎn)自網(wǎng)上稍有修改2009-03-03
CommunityServer又稱CS論壇的相關(guān)學(xué)習(xí)資料
以前項(xiàng)目需要整合這個(gè)論壇,同事找了一些資料,現(xiàn)在放上來(lái),并說(shuō)下自己對(duì)這個(gè)論壇的看法。2009-05-05
.NET更新Xml中CDATA內(nèi)容的方法實(shí)例
這篇文章介紹了.NET更新Xml中CDATA內(nèi)容的方法實(shí)例,有需要的朋友可以參考一下2013-07-07
最鋒利的Visual Studio Web開(kāi)發(fā)工具擴(kuò)展:Web Essentials使用詳解
Web Essentials是目前為止見(jiàn)過(guò)的最好用的VS擴(kuò)展工具了,具體功能請(qǐng)待我一一道來(lái)。2016-06-06



