0

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

动态页面中的 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 回答