0

Delphi内でダイナミックHTMLを生成しています。Webページ本体内にUTF-8文字列を表示するのに問題はありません。HTMLEscapeを使用して通常の文字列をエンコードします(文字列リスト内のすべての文字列は以前にエスケープされています)。

この問題は、動的ページ内のスクリプト(javascript)関数内で発生します。

'<script language="javascript" charset="UTF-8">'+#10+
(...)
'function ProcessAddUserButton(){'+#10+
'alert("'+web_content_sl[70]+'");'+
'}'+#10+

「usuário」という単語を含む文字列のusu&#225;rio場合、アラートボックスに表示されますが、HTML本文内で同じ文字列を使用すると、正しく表示されます。上記のように、スクリプト定義内に文字セットを含めようとしましたが、成功しませんでした。同じページの同じ文字列から異なる結果が得られる理由がわかりません。

動的ページのMETAタグは次のとおりです。

'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'+#10+

誰かがこれを経験したように?

4

1 に答える 1

1

文字列は文字通り"usu&#225;rio"です。HTMLをデコードするコンテキストでのみ「正しく」表示されます。javascriptを使用して手動でデコードすることもできますが、HTMLでエンコードする代わりに、最初にサーバーからリテラル文字を渡す方が簡単です。

javascriptで手動でデコードする関数は次のとおりです。

function decodeHTML( str ) {
    return str.replace( /(?:&#x([a-fA-F0-9]+);|&#([0-9]+);)/g, function(full, m1, m2 ) {
        if( m1 ) {
            return String.fromCharCode(parseInt(m1, 16));
        }
        else {
            return String.fromCharCode(parseInt(m2, 10));
        }
    });
}

alert(decodeHTML( "usu&#225;rio" )) //alerts "usuário"
于 2012-07-05T20:17:35.527 に答える