在Delphi的动态页面中的Javascript里面的Charset

时间:2012-07-05 20:06:33

标签: javascript html delphi utf-8 delphi-xe

我在Delphi中生成动态HTML。我在网页正文中显示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正文中使用相同的字符串,它将正确显示。我已经尝试将charset包含在脚本定义中,如上所示,但没有成功。我不明白为什么我在同一页面中从同一个字符串中得到不同的结果。

动态页面中的META标记是:

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

有没有人经历过这个?

1 个答案:

答案 0 :(得分: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"