将文本编码为JavaScript函数

时间:2011-10-17 13:07:32

标签: c# javascript asp.net encoding

我正试图将文本传递给我的JavaScript函数。

hplDetails.NavigateUrl = "JavaScript:GetSpecialEquipmentsDetails('" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentCode + "','" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentName + "')";

我的第二个参数包含带重音符号,特殊字符的任何文本。但是当我进入我的JavaScript函数时,文本被破坏了。 有人对我有任何提示吗?

3 个答案:

答案 0 :(得分:1)

ASP.NET正在编码NavigateUrl属性。

在js函数中使用decodeURI

答案 1 :(得分:1)

而不是<asp:HyperLink>尝试这样的事情:

<a id="hplDetails" runat="server">Text here</a>

然后使用以下代码分配其URL:

hplDetails.Attributes["href"] = "URL here.....";

希望这不会弄乱你的特殊角色。

答案 2 :(得分:1)

在一个名为StringUtil的类中使用这样的实用函数:

public static string JsEncode(string text)
{
    StringBuilder safe = new StringBuilder();
    foreach (char ch in text)
    {
        // Hex encode "\xFF"
        if (ch <= 127)
            safe.Append("\\x" + ((int)ch).ToString("x2"));
        // Unicode hex encode "\uFFFF"
        else
            safe.Append("\\u" + ((int)ch).ToString("x4"));
    }
    return safe.ToString();
}

...意味着您可以将值编码为安全的JavaScript编码字符串:

hplDetails.NavigateUrl = "JavaScript:GetSpecialEquipmentsDetails('" + StringUtil.JSEncode( ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentCode + "','" + ((SGViagens.Entities.SpecialEquipment)(e.Item.DataItem)).EquipmentName ) + "')";