2011-01-27 28 views
27

我有一些正在用JavaScript编码的查询文本,但我遇到了一个用例,我可能必须在服务器端编码相同的文本,并且发生的编码不是相同。我需要它是一样的。这是一个例子。Url编码引号和空格

我在搜索框中输入"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正在编码我的空间,但不编码我的转义引号。

我真的需要它来做,否则搜索代码完全borks我(我无法控制搜索代码)。

小贴士?

+2

做一个字符串搜索/替换以替换%20的空格,然后执行常规UrlEncode? – 2011-01-27 18:17:00

+1

@Marc乙:这不会使UrlEncode对“%”字符进行编码(每个空间导致%2520)? UrlPathEncode非常奇怪的行为。至少UrlEncode将文件从空格转换为“+”。 UrlPathEncode sais没有关于不转换引号... – 2011-01-27 18:35:41

+1

嗯。好点子。我猜你可以用其他方式,UrlEncode首先,然后用%20's搜索/替换+' – 2011-01-27 18:38:12

回答

51

UrlPathEncode不逃避",因为他们并不需要在路径组件进行转义做。

Uri.EscapeDataString应该做你想做的。

9

有几个选项可供您使用,最快的可能是使用UrlEncode然后做一个字符串。替换+字符与%20

喜欢的东西

HttpUtility.UrlEncode(input).Replace("+", "%20"); 
-1
WebUtility.UrlEncode(str) 

将编码所有需要使用%XX格式编码的字符,包括空格。