2012-02-26 119 views
3

我要像「O」字直接打印,但在源「O」顯示爲ø在HTML輸出的特殊字符

如果輸出經過Html.Encode()它不會使正確的字符,但ø

在配置

​​

來源:

<li><%: Html.ActionLink("Støvletter", "ListProducts", "Tag", new { tag = "Stovletter" }, null)%></li> 

此輸出:

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li> 

但輸出應該是這樣的:

<li><a href="/Tag/Stovletter">Støvletter</a></li> 
+0

這種情況下的「來源」是什麼?你需要提供更多的上下文。 – 2012-02-26 13:26:14

+0

我更新了源代碼和輸出。 – OMGKurtNilsen 2012-02-26 13:28:40

+0

@DarinDimitrov:因爲如果我通過Html.Encode()運行我的字符串,那麼字面上顯示爲「ø」給用戶。 – OMGKurtNilsen 2012-02-26 13:29:43

回答

1

你可以嘗試用<%=,而不是編碼<%:

HTML創建輸出(我發表這個意見後,您的積極評論我的意見)

+1

我很難想出這是正確選擇的情況。我寧願使用'IHtmlString','HtmlString'或'MvcHtmlString'。 – CodesInChaos 2012-02-27 12:23:14

+0

我選擇這個作爲接受的答案,因爲它解決了我的問題除了使用Html.ActionLink() – OMGKurtNilsen 2012-03-01 13:08:45

1

據我所知,除非你滾你自己的自定義HTML編碼程序(這是我絕對建議你反對)這是不可能的。

生成的HTML是正確的,並且字符在客戶端瀏覽器上正確顯示。 HTML旨在被程序(網絡瀏覽器)讀取,以便將其呈現爲人類可讀形式,而非人類。

<li><a href="/Tag/Stovletter">St&#248;vletter</a></li> 

是將要顯示這樣的客戶端瀏覽器上的一個完全有效的HTML:

enter image description here

+1

在html/xml中沒有特殊含義的實體編碼字符是非常愚蠢的IMO。這就是我們使用UTF8的原因。這當然是有效的,但國際海事組織非常醜陋。 – CodesInChaos 2012-02-26 13:34:35

+0

此外,IMO的可讀性是html的一項功能。否則,我們可以使用二進制格式,這將更緊湊,更容易解析。 – CodesInChaos 2012-02-26 13:39:38

+0

@CodeInChaos,用戶代理並不像我們人類那樣真正具有「醜」的概念:-)他們理解標記有效性的概念。就二進制格式而言,這正是你在生產中應該用你的網站所做的事情=>刪除所有的空格,gzip等等。您最近是否查看過http://google.com HTML源代碼? – 2012-02-26 13:40:29

3

這可能不是你的答案正在尋找,但它仍然很有趣。

如果你看一下HttpEncoder源代碼,這使得使用,而不是默認WebUtility.HtmlEncode

我身邊有玩計提customHtmlEncoders,發現微軟的HtmlEncoder called AntiXSS正確編碼這些字符。

我使用Nuget安裝了它:

PM> Install-Package AntiXSS 

然後更新我的web.config這樣:

<system.web> 
    <httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, 
AntiXssLibrary" /> 
    .... 
</system.web> 

正常輸出和Html.ActionLinks似乎工作。

+0

所有地方我找不到他們的存儲庫中正確的源代碼文件。你能發佈鏈接嗎?我發現的函數被調用的方式不同,並且默認情況下,編碼不在小白名單中的所有字符。 – CodesInChaos 2012-02-27 12:34:15

+0

@CodeInChaos,我用Resharper's自動從微軟的服務器下載代碼。以下是我正在查看的WebUtility.Encode中的代碼片段:http://tinyurl.com/75j3njm,請參閱第74-81行。 øoridinal值248,因此被編碼。該代碼必須已經使用「ENTITY_ENCODE_HIGH_ASCII_CHARS」編譯器指令編譯了此行爲。 – 2012-02-27 13:28:57