2012-04-19 117 views
0

我遇到了一些字符串编码问题,也许它是一个iis问题,或者我忽略了一些问题。基本上,随机地,当用户提交更改时,文本将与%20一起存储,就好像它完全忽略了我的解码。它从来没有发生在我本地主机,现场或任何浏览器上;它永远不会一致,甚至不知道如何测试发生了什么问题。从Javascript到C#编码和解码字符串 - 不工作

只是要粘贴基本部分:

文本控制接受用户输入

<asp:TextBox TextMode="MultiLine" runat="server" txtActionUpdate"></asp:TextBox> 

然后

的Javascript “逃逸”,并通过对AJAX方法被发送到代码隐藏

var tAction = escape(document.getElementById("txtActionUpdate").value); 

然后

在的webmethod我解码与执行以下操作:

Test = Microsoft.JScript.GlobalObject.unescape(tAction); 

(以前是:测试= HttpUtility.UrlDecode(tAction);

但无一不是这两个解码选项上面的工作完美(对我?)。但随机地,当用户正在处理它时,它会逐字地“跳过”解码步骤,并将其以编码格式(即:this%20is%20a%20Test%20string)写入数据库,就好像我从来没有代码。

我们有多个客户(单独的URL),但有一个代码库。在发布期间,我先删除然后发布,清除应用程序池,让用户清除浏览器缓存(实际上讨厌后者),但这似乎从未保持一致。我有一种感觉,这是更多的“缓存”或“服务器设置”的问题,而不是代码问题......让我看起来不好! ;) 大声笑。任何人都有一些预感?

+0

没有看到更多的代码,它可能不可能提供帮助。 – Pointy 2012-04-19 13:05:48

回答

1

我不会使用escape这个(或其他)。我会使用encodeURIComponent,然后用HttpUtility.UrlDecode解码(我认为,显然,MSDN现在正在运行)。

+0

我唯一改变的部分是解码方法背后的代码。因为我认为它很好,所以总是离开'逃生'。看到不少论坛提及避免“逃避”,因为接收服务器可能无法“理解”某些字符。我会尝试你的建议;我以前见过它,只是总是认为它更适合URL,因为它只是纯文本(包括/ \ * +等)。好极了! ;) – 2012-04-19 13:18:01

1

我的猜测是,在客户端的某个地方数据编码了两次,然后导致你看到的效果。

+0

这是一个非常好的想法。 – 2012-04-19 14:11:36