JS和C#之间字符串的编码和解码问题

3

我在JS编码和C#服务器解码方面遇到了问题。

我使用javascript中的encode()函数 - 但当我有像+这样的特殊字符时,C#中的httputility.urldecode()会将其转换为SPACE char。

什么是JS编码和C#解码之间最好的通信方式?

我有一个<a href='javascript:foo(escape('hello +'))' />

function foo(data)
{
$.ajax({ url: "http:/....." + data, dataType: 'html', context: document.body
...
...
}

我调试了服务器,结果得到了'hello++' - 它不知道哪个+是空格还是加号。谢谢!

3个回答

2

JavaScript:

escape(string);

C#:

Microsoft.JScript.GlobalObject.unescape(string);

这个组合对我来说很好用。

2

Javascript的encode函数用于进行html编码。由于在HTML中,+是有效的字符,因此该函数不会对其进行任何处理。

然而,如果你将该字符串通过URL传递,那么+在URL中表示一个编码后的空格。

如果你想要正确地对+进行编码以便在服务器端使用,你需要使用Javascript的encodeURIComponent函数:

<a href='javascript:foo(encodeURIComponent('hello +'))' />

你需要了解,HTML 编码和 URL 编码是不同的事情

仍然没有生效。JS将“+”传递给服务器,但它仍将“+”解码为空格。 - Himberjack
@oshafran - 很好。现在我知道我们正在处理什么,我也更新了我的答案。 - Oded
其他特殊字符(例如'@~等)怎么办? 我想知道JS和C#之间的编码\解码关系 - 这意味着我如何在JS中进行编码,以及如何在C#中使用相同的算法进行解码。 - Himberjack
在这两种情况下(urlDecode和HtmlDecode),我都得到了“Hello ”。当我调试请求 QueryString 时,我看到 Ajax 发送了“Hello++”。 - Himberjack
似乎URIencode没有传递到服务器(正如alert向我展示的,hello%20%2B)。 - Himberjack
显示剩余14条评论

-1

无需在JavaScript中进行编码,在C#中进行解码。只需使用“encodeURIComponent(string)”JavaScript函数,无需对C#代码进行任何更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接