2010-02-26 96 views
0

使用FreeTextBox,我捕獲HTML格式的文本。目的是允許網站所有者在幾頁上更新他們的網頁內容。除了知道如何處理生成的HTML標記之外,我已完成系統。html注入問題

頁面編輯器完成自己的工作後,我可以從FreeTextBox輸出,以HTML格式,像這樣:<font color="#000080"><b>This is some text.</b></font>

我試圖把它作爲在web.config中逃脫的標記,但沒有奏效因爲它甚至在我將它們更改爲轉義字符之後仍然保留着標籤,如下所示:&lt;font color=&quot;#000080&quot;&gt;

我想將這種類型的字符串存儲爲web.config中的一個鍵的原因是,我可以成功存儲靜態字符串,爲它設置一個lebel的值,併成功渲染文本。但是,當我試圖逃避它,它以.Net以某種方式重新格式化web.config。

所以我逃過了所有的字符,將它們編碼爲Base64並存儲了它們。然後在page_load上,我嘗試對它進行解碼,但它只是顯示爲文本,同時也顯示了所有的html標籤 - 它不會呈現。我知道有一百萬人使用這種控制方式,但是如果我能夠弄清楚如何正確地做到這一點,我會很尷尬。

所以,這裏是我的問題:我如何將保存的HTML插入到已編輯的頁面中,以便在瀏覽器中顯示,例如編輯器想要的樣子?

+0

您是否有如何在頁面上顯示保存的HTML的例子?如果你有一個包含HTML標籤的字符串,把它扔到標籤中會輸出標籤並使瀏覽器呈現它們(假設它們實際上是標籤,而不是<,但Server.HtmlDecode可以用來處理這個標籤)。 – 2010-02-26 15:06:04

回答

0

嘗試Server.HtmlDecode將HTML輸出到屏幕。
作爲一個方面說明,我更喜歡使用CKEditor進行html格式的輸入。我發現它是所有選項(FreeTextBox,TinyMCE,其他任何選項)中更好的選擇,它在3.0版本中得到完全重寫並更快!

+0

你在問我「嘗試」你的解決方案。我必須承認對你的答案有一定的懷疑,因爲它還包括一個銷售計劃的插件。此外,如果我還沒有嘗試過,我當然不會在Stack Overflow上發佈。 – 2010-02-26 03:29:46

+0

對不起,「嘗試」。我只是不完全確定使用動詞「使用」。關於該計劃,我不以任何方式參與該計劃,因爲您可能想知道。這只是我使用的東西,喜歡並且認爲你可能想要退房。它也有一個開源許可證。 – 2010-02-26 03:39:06

0

如果有人來這裏找答案,這裏有一種方法可以做到。

我有最初的問題,web.config在存儲時改變了一些HTML標籤,所以我們使用B64編碼(可能不是必須的)。將保存的HTML標記作爲Base64編碼存儲在web.config中的AppSettings項中,將其用於設置更新功能。添加錯誤檢查和其他任何你需要做的:

'create configuration object 
Dim cfg As Configuration 
cfg = WebConfigurationManager.OpenWebConfiguration("~") 
'get reference to appsettings("HTMLstring") 
Dim HTMLString As KeyValueConfigurationElement = _ 
CType(cfg.AppSettings.Settings("HTMLstring"), KeyValueConfigurationElement) 

'get text entered by user and marked up with HTML tags from FTB1, then 
'encode as Base64 so we can store it as XML-safe string in web.config 
Dim b64String As String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(FTB1.Text)) 

'save new value into web.config 
If Not HTMLString Is Nothing Then 
    HTMLString.Value = b64String 
    cfg.Save() 
End If 

接下來,添加一個文字控制的ASPX標記:

<asp:Literal id="charHTML" runat="server"/> 

要保存的HTML添加到後期編輯的頁面上,在Page_Load中:

'this string of HTML code is stored in web.config as Base64 to preserve XML-unsafe characters that come from FreeTextBox. 
Dim injectedHTML As String = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(AppSettings("HTMLstring"))) 

'the literal control will directly inject this HTML instead of encoding it 
charHTML.Mode = LiteralMode.PassThrough 
'set the value 
charHTML.Text = injectedHTML 

希望這有助於。 sF