2010-06-08 85 views
0

有沒有辦法指定html文件的某些部分作爲另一種編碼?是否可以爲一個HTML設置兩種編碼?

(生成的)html的默認編碼是utf-8。但是,在html中插入的一些包含的數據是另一種編碼。它是這樣的:

<div> 
    the normal html in utf-8 
</div> 

<div> 
    <%= raw_data_in_another_encoding %> 
</div> 

有沒有辦法來暗示瀏覽器中呈現的另一種編碼第二<div>?謝謝

+0

我不認爲它的工作原理就是這樣,但我發誓我使用PHP做了這樣的事情,但我不記得確切的和對於我的生活我找不到該文件! – animuson 2010-06-08 03:07:35

回答

0

不,整個文件必須有一個單一的編碼。如果您要保存一個簡單的.html文件,則必須將整個文件轉換爲一種編碼。

但是,如果您使用的是服務器端腳本語言,則始終可以將文本從一種編碼轉換爲另一種編碼。您可能會指定UTF-8作爲頁面的編碼,然後當您遇到目前編碼爲latin1的內容位時,您可以在輸出之前將其轉換爲UTF-8。

你當然會這麼做,這取決於你使用的服務器端語言。

在PHP中,你可以這樣做:

echo iconv('ISO-8859-1', 'UTF-8', $someLatin1Text); 
+0

iconv將顯示錯誤:如果$ someLatin1Text包含某些不在可接受字符範圍內的內容,則在SomeView#中顯示Iconv :: IllegalSequence。 – ohho 2010-06-08 04:53:24

+0

是的。你必須知道你正在使用什麼編碼,並將其指定爲第一個參數。在我的例子中,我假設'$ someLatin1Text'確實包含latin1文本。 – VoteyDisciple 2010-06-08 12:41:54

0

你可以在你的HTTP響應流中的任何時間點發送任意的編碼,但一般客戶端將無法處理它。在HTML中,不允許在同一文檔中使用多種編碼。或者甚至可以由任何現代客戶優雅地處理,除了可能意外。

如果您使用Ruby(僅基於您的命名約定進行猜測),則可以使用iconv庫將字符串從一種編碼轉換爲另一種編碼。如果你使用別的東西,最有可能有類似的選擇。 PHP和Python都提供了一些基於iconv庫的編碼轉換選項。在.Net框架中,您可以使用Encoding類來獲取合適的源編碼,並使用源字節數組作爲參數調用GetBytes,以獲取適合進一步操作的字符串。

如果您主要使用其他編碼並且僅偶爾使用該編碼支持的範圍之外的字符,則數字字符引用是另一種選擇。但是,通常通過遺留編碼轉換爲UTF-8和從UTF-8轉換來保持穩定。

+0

如果編碼字符不在爲該編碼定義的字符範圍內,iconv將生成錯誤。由於它是用戶數據,我無法保證它符合編碼範圍。這就是我選擇直接將數據傳遞到瀏覽器的原因。 – ohho 2010-06-08 04:46:38

+0

用戶數據是否從其他網頁發送給您?那麼你應該把它存儲在UTF-8中。如果它在正確標記爲UTF-8的頁面中發送給您,您將得到它已編碼。如果來自其他數據源,則應在存儲時標記它。如果這是不可能的,並且你不知道它是什麼編碼,你唯一真正的選擇是發送出類似於IFRAME的數據而不發送任何編碼元數據,因此用戶可以強制IFRAME的頁面編碼爲其他東西,但是這對於大多數用戶來說非常激烈並且不容易發現。 – JasonTrue 2010-06-08 05:26:17

+0

的數據來自用戶數據庫。 – ohho 2010-06-08 06:11:07

0

我覺得你不能,但如果你需要一些文本以不同的編碼顯示,你可以做一個「翻譯功能」。我有一個英文頁面,在這裏我不得不添加一些spannish消息類似的問題,所以我做這樣的事情:

function spanishEncoding (string) { 
    var res = string; 
    res = res.replace(/á/g, "\u00e1"); 
    res = res.replace(/Á/g, "\u00c1"); 
    res = res.replace(/é/g, "\u00e9"); 
    res = res.replace(/É/g, "\u00c9"); 
    res = res.replace(/í/g, "\u00ed"); 
    res = res.replace(/Í/g, "\u00cd"); 
    res = res.replace(/ó/g, "\u00f3"); 
    res = res.replace(/Ó/g, "\u00d3"); 
    res = res.replace(/ú/g, "\u00fa"); 
    res = res.replace(/Ú/g, "\u00da"); 
    res = res.replace(/ñ/g, "\u00f1"); 
    res = res.replace(/Ñ/g, "\u00d1"); 
    return res; }; 

var newDiv = window.content.document.createElement("div"); 
newDiv.appendChild(window.content.document.createTextNode("Esta página")); //This shows "Esta p*Â!*gina" 

var anotherDiv = window.content.document.createElement("div"); 
anotherDiv.appendChild(window.content.document.createTextNode(spanishEncoding("Esta página"))); //This shows "Esta página" 

希望它可以幫助你!

相關問題