假设我有一个URL
http://example.com/query?q=
并且我有一个用户输入的查询,例如:
随机字500英镑银行$
我希望结果是一个正确编码的URL:
http://example.com/query?q=random%20word%20%A3500%20bank%20%24
实现这一点的最佳方法是什么?我尝试了urlencoder
并创建URI/URL对象,但结果都不是很对。
我不会使用urlencoder
。除了名称不正确(urlencoder
与URL无关)、效率低(它使用stringbuffer
而不是Builder,并且执行了一些其他缓慢的操作)之外,还很容易搞砸。
相反,我将使用uribuilder
或spring的org.springframework.web.util.uriutils.encodequery
或Commons ApacheHttpClient
。原因是您必须以不同于参数值的方式转义查询参数名称(即Balusc的答案Q
)。
上面唯一的缺点(我痛苦地发现)是URL不是URI的真正子集。
示例代码:
import org.apache.http.client.utils.URIBuilder;
URIBuilder ub = new URIBuilder("http://example.com/query");
ub.addParameter("q", "random word £500 bank \$");
String url = ub.toString();
// Result: http://example.com/query?q=random+word+%C2%A3500+bank+%24
因为我只是链接到其他答案,所以我把这个标记为社区维基。请随意编辑。
urlencoder
是一种可行的方法。您只需要记住,只对单个查询字符串参数名称和/或值进行编码,而不是对整个URL进行编码,当然不是对查询字符串参数分隔符&
或参数名称-值分隔符=
进行编码。
String q = "random word £500 bank $";
String url = "https://example.com?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);
当您还没有使用Java 10或更新版本时,请使用StandardCharsets.utf_8.ToString()
作为字符集参数,或者当您还没有使用Java 7或更新版本时,请使用“UTF-8”
。
请注意,查询参数中的空格由+
表示,而不是由合法有效的%20
表示。%20
通常用于表示URI本身中的空格(URI查询字符串分隔符?
之前的部分),而不是查询字符串中的空格(?
之后的部分)。
还要注意,有三个encode()
方法。一个不使用charset
作为第二个参数,另一个使用string
作为第二个参数,这将引发检查异常。不推荐使用不带charset
参数的。永远不要使用它,并且始终指定charset
参数。javadoc甚至明确推荐使用RFC3986和W3C规定的UTF-8编码。
所有其他字符都是不安全的,首先使用某种编码方案转换成一个或多个字节。然后每个字节由3个字符的字符串“%xy”表示,其中xy是字节的两位数十六进制表示。推荐使用的编码方案是UTF-8。但是,出于兼容性原因,如果未指定编码,则使用平台的默认编码。
问题内容: 说我有一个网址 并且我有一个用户输入的查询,例如: 随机词银行 我希望结果是正确编码的URL: 实现此目标的最佳方法是什么?我尝试创建URI / URL对象,但没有一个是正确的。 问题答案: 应该是要走的路。你只需要记住只对单个查询字符串参数名称和/或值进行编码,而不对整个URL 进行编码,请确保对查询字符串参数分隔符和参数名称-值分隔符都不进行编码。 请注意,查询参数中的空格由+而不
问题内容: 我有一个网址 并且我有一个用户输入的查询,例如: 我希望结果是正确编码的URL: 实现此目标的最佳方法是什么?我尝试创建URI / URL对象,但是没有一个是正确的。 问题答案: 可以使用 。您只需要记住只对单个查询字符串参数名称和/或值进行编码,而不对整个URL 进行编码,请确保对查询字符串参数分隔符&和参数名称-值分隔符都不进行编码=。 请注意,查询参数中的空格由而不是表示,这是合
我从客户端发送了以下查询字符串参数 在REST服务器中,我如何接收上述格式并正确分配给每个类别? 更新1 参数的值为 {_=[1437904506062],{“take”:75,“skip”:0,“page”:1,“pageSize”:75、“filter”:{“logic”:“and”,“filters”:〔{“field”:“prodCode”,“operator”:“eq”,“value”:
但是,有没有可能在API网关中硬编码访问令牌,将其传递到目的地,这样用户就不必将其包含在请求中了呢? 或者我唯一的选择就是为了这个做一个兰姆达...?
问题内容: 从格式如下的URL查询字符串中获取参数的“较少代码”方法是什么? www.mysite.com/category/subcategory?myqueryhash 输出应为: 我知道这种方法: 问题答案: 包含您要查找的数据。 文件资料 **php.net:$** _SERVER-手册
问题内容: 我正在努力在路由中传递和读取多个查询字符串参数。 这是搜索页面: 这是JobOffersController: 读取$ routeParams根本不起作用。如果我将“ developer”作为关键字,将“ New York”作为位置,则$ routeParam对象如下所示: 有人可以告诉我我在做什么错吗?提前致谢。 PS这可能是由于错误配置的路由吗?当我通过该函数导航时,它会将URL编