2010-12-15 14 views
0

ISO-8859-1文字セットを使用するWebアプリケーションがあります。 Occationalyユーザーは、Š(あなたの便宜のためにここにエンコードされたhtml)のような文字を含む「奇妙な」名前を持っています。 これをデータベースに保存しますが、は正しく表示されません。HTMLエンコーディング文字が文字セットに含まれていません

これを処理する最善の方法は何ですか?私は、HTMLエンティティ番号エンコーディング(Š〜Š)で文字セット外の文字を自動的に変換する必要があると思っています

しかし、私はどのようにこれを自動的に行うか。

このコードは、 'å'(ISO-8859-1にあります)のような拡張ASCII文字で使用できます。他のキャラクターと同じことをしたいと思います。これらのHTMLエンティティに使用できる値をエンコードするパターンはありますか?

unsigned int c; 
for(int i=0; i < html.GetLength(); i++) 
{ 
    c = html[i]; 
    if(c > 255 || c < 0) 
    { 
     CString orig = CString(html[i]); 
     CString encoded = "&#"; 
     encoded += CTool::String((byte)c); 
     encoded += ";"; 
     html.Replace(orig, encoded); 
    } 
} 

答えて

1

Webページは表示 UTF-8での応答にブラウザに指示する必要があります。これは、通常text/html;charset=UTF-8のような応答ヘッダーのContent-Typeの文字セットを指定することによって行われます。

Response.AppendHeader("Content-Type", "text/html;charset=UTF-8"); 

あなたはUTF-8以外のエンコーディングで保存ウェブページのソースにできるように、HTML/XMLエンティティはもっぱらあります。

+0

はい、これは動作しますが、私はISO-8859-1を理由で実行していると思います。うまくいけない、しかし...私は知っているべき人とチェックするつもりです。それは私たちのすべてのサーバー上のキャラクターセットを変更する危険な操作ですが、私は不安定な回避策をコーディングするのではなく、そうしたいと思います。 – Polymorphix

+1

すでに7ビットのASCII範囲外の「特殊文字」にHTMLエンティティを使用していれば、それは危険ではありません。 ISO-8859-1とUTF-8は、ASCII文字のバイト表現とまったく同じです。 – BalusC

0

htmlは "Unicode" CStringのようです。つまり、UTF-16でエンコードされています。 "& #ddd"構文は、Unicodeコードポイント番号を使用します。通常、これは非常に簡単です。 ŠはU + 0160です。つまり、UTF-16では0x0160です。 Thaはもちろん352小数なので、&#352となります。

U + FFFFを過ぎたBasic Multilingual Plane(BMP)以外の文字に遭遇した場合にのみ問題が発生します。これはもはや16ビットに収まりませんので、html文字列には2文字が必要です。それでも、値は&#dddddの1つだけ生成されます。これは非常にまれで、しばしば無視することができます。

関連する問題