我有一些用JavaScript编码的查询文本,但是我遇到了一个用例,我可能需要在服务器端编码相同的文本,并且发生的编码不一样。我需要它是一样的。这是一个例子。
我在搜索框中输入"I like food"
并点击search
按钮。 JavaScript将其编码为%22I%20like%20food%22
假设我在服务器端的请求对象上获得与字符串相同的值。它看起来像这样:"\"I like food\""
当我使用HttpUtility.UrlEncode(value)
时,结果为"%22I+like+food%22"
。如果我使用HttpUtility.UrlPathEncode(value)
,则结果为"\"I%20like%20food\""
所以UrlEncode
正在编码我的引号但是使用+
字符表示空格。 UrlPathEncode
正在对我的空间进行编码,但不对我的转义引号进行编码。
我真的需要它来做两件事,否则搜索代码完全惹恼了我(我无法控制搜索代码)。
提示?
答案 0 :(得分:54)
UrlPathEncode
无法转义"
,因为它们不需要在路径组件中进行转义。
Uri.EscapeDataString
应该做你想做的事。
答案 1 :(得分:9)
您可以选择几个选项,最快的可能是使用UrlEncode,然后执行string.replace将+
个字符与%20
交换。
像
这样的东西HttpUtility.UrlEncode(input).Replace("+", "%20");
答案 2 :(得分:-1)
WebUtility.UrlEncode(str)
将编码所有需要使用%XX
格式编码的字符,包括空格。