【问题标题】:Url encoding quotes and spaces网址编码引号和空格
【发布时间】: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


【解决方案1】:

UrlPathEncode 不会转义 ",因为它们不需要在路径组件中转义。

Uri.EscapeDataString 应该做你想做的事。

【讨论】:

  • 谢谢!奇怪的是很少有人知道这件事。
  • 我同意。希望 Uri.EscapeDataPath 的使用/知识更广泛,因为这正是我所需要的。
【解决方案2】:

有几个选项可供您使用,最快的可能是使用 UrlEncode 然后执行 string.replace 将 + 字符与 %20 交换。

类似

HttpUtility.UrlEncode(input).Replace("+", "%20");

【讨论】:

  • 谢谢。我考虑了字符串替换选项,但我希望有一种方法可以真正正常工作。看来我将不得不依靠这一点。当然,你说有几个选项,你只列出了一个……我很想看看其他的。谢谢!
  • 我发现很有用 System.Web.HttpUtility.UrlPathEncode(string str);给 %20 空间
  • 我根本不喜欢这个解决方案。如果文本中有空格,用“%20”替换“+”将解决问题,但如果文本有“+”,则会产生其他问题! !!
  • @EmanueleGreco 如果您已经对字符串进行了 url 编码,那么它将不包含任何不应该是空格的 + 字符。 + 符号将被编码为 %2B。
【解决方案3】:
WebUtility.UrlEncode(str)

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

【讨论】:

  • 这完全是错误的,因此具有误导性。 WebUtility.UrlEncode 将空格变成“+”
  • 注意:此答案已被标记,随后进入review queue。它不应该被标记,因为它试图回答这个问题。对错误答案的回应是投反对票,而不是举报。
猜你喜欢
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2011-11-23
  • 2016-10-11
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多