【发布时间】:2016-07-07 06:12:39
【问题描述】:
我有一些使用 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 正在对我的空格进行编码,但没有对我的转义引号进行编码。
我真的需要它来做这两件事,否则搜索代码完全让我感到厌烦(而且我无法控制搜索代码)。
提示?
【问题讨论】:
-
执行字符串搜索/替换以用 %20 替换空格,然后执行常规 UrlEncode?span>
-
@Marc B:这不会让 UrlEncode 对“%”字符进行编码(导致每个空格都为 %2520)吗? UrlPathEncode 的行为非常奇怪。至少 UrlEncode 记录了它从空格到“+”的转换。 UrlPathEncode 对不转换引号一无所知...
-
嗯。好点子。我想你可以另辟蹊径,先进行 UrlEncode,然后用 %20's 搜索/替换 +'s
-
您好,不幸的是,Marc B 的解决方案并不完全正确,好像根字符串包含“+”字符,这会将其转换为空格。我看到的唯一解决方案是将第一个空格转换为“THIS_IS_A_SPACE”之类的字符串,然后使用 UrlEncode,然后将“THIS_IS_A_SPACE”转换为 %20
标签: c# asp.net-mvc urlencode