我有一个附加了长查询字符串的URL.页面加载后,我不需要查询字符串.所以我想从地址栏中删除查询字符串而不重新加载页面.
我试着parent.location.hash = '';和window.location.href = '/#'
他们并没有什么不同.
我需要解码包含查询字符串的URI; 预期的输入/输出行为类似于以下内容:
abstract class URIParser
{
/** example input:
* something?alias=pos&FirstName=Foo+A%26B%3DC&LastName=Bar */
URIParser(String input) { ... }
/** should return "something" for the example input */
public String getPath();
/** should return a map
* {alias: "pos", FirstName: "Foo+A&B=C", LastName: "Bar"} */
public Map<String,String> getQuery();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用java.net.URI,但它似乎解码了查询字符串所以在上面的例子中我留下了"alias = pos&FirstName = Foo + A&B = C&LastName = Bar"所以有一个歧义"是& "是查询分隔符,或者是查询组件中的字符.
编辑:我刚刚尝试了URI.getRawQuery()并且它没有进行编码,所以我可以用a分割查询字符串&,但是我该怎么办?Javascript有decodeURIComponent,我似乎无法在Java中找到相应的方法.
有什么建议?我宁愿不使用任何新库.
在PHP中,我需要一个函数来从URL转换查询字符串,比如说:http://example.com?key1=value1&key2=value2成为一个PHP关联数组:array ['key1' => 'value1', 'key2' => 'value2'].
我已经达到了这段代码.它有效,但我发现它有点冗长.(并且PHP内置了所有功能:我很惊讶我没有发现任何开箱即用的东西,就像反过来一样http_build_query.)
你能建议一个更好的方法吗?
function getUrlParams($url) {
$querystring = parse_url($url, PHP_URL_QUERY);
$a = explode("&", $querystring);
if (!(count($a) == 1 && $a[0] == "")) {
foreach ($a as $key => $value) {
$b = explode("=", $value);
$a[$b[0]] = $b[1];
unset ($a[$key]);
}
return $a;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud) 在ASP.NET MVC中调试时,我没有看到以下区别:
http://mysite.com?q=hi,bye
Run Code Online (Sandbox Code Playgroud)
和
http://mysite.com?q=hi%2Cbye
Run Code Online (Sandbox Code Playgroud)
查询字符串参数"q"的值始终为"hi,bye".
那么为什么逗号编码?
我想做这样的事情/sf/answers/52647661/.
我有这样的形式:
<form method="GET" action="/Search">
<input type="hidden" name="q" value="hi,bye"/>
<input type="submit" value="ok"/>
</form>
Run Code Online (Sandbox Code Playgroud)
如何防止此值被编码?
使用以下代码:
string q = "userID=16555&gameID=60&score=4542.122&time=343114";
Run Code Online (Sandbox Code Playgroud)
什么是最简单的解析值的方法,最好不要编写我自己的解析器?我正在寻找具有相同功能的东西Request.querystring["gameID"].
使用ASP.NET MVC Preview 5(尽管已经尝试使用Beta),路由中的查询字符串默认值会覆盖查询字符串中传递的值.一个repro就是写一个像这样的控制器:
public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
Run Code Online (Sandbox Code Playgroud)
路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo", x = 1 });
Run Code Online (Sandbox Code Playgroud)
然后使用这个相对URI调用它:
/Test/Foo?x=5
Run Code Online (Sandbox Code Playgroud)
我看到的跟踪输出是:
1
5
Run Code Online (Sandbox Code Playgroud)
换句话说,为路径设置的默认值总是传递给方法,而不管它是否实际上是在查询字符串上提供的.请注意,如果删除了查询字符串的默认值,即路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo" });
Run Code Online (Sandbox Code Playgroud)
然后控制器按预期运行,并将值作为参数值传入,给出跟踪输出:
5
5
Run Code Online (Sandbox Code Playgroud)
这对我来说就像一个bug,但我会发现非常令人惊讶的是,像这样的bug仍然可以在ASP.NET MVC框架的测试版中,因为带有默认值的查询字符串并不完全是一个深奥或边缘的功能,所以这几乎肯定是我的错.我有什么想法我做错了吗?
如何接受传递GET或POST值不区分大小写?
喜欢sample.php?OrderBy=asc仍然会和sample.php?orderby=ascor一样sample.php?ORDERBY=asc
有没有办法有效地实现上述目标?
我正在尝试在我的MVC4 WebAPI项目中配置路由.
我希望能够根据他们的名字或类型搜索产品,如下所示:
/api/products?name=WidgetX- 返回名为WidgetX的所有产品
/api/products?type=gadget- 返回gadget类型的所有产品
路由配置如下:
config.Routes.MapHttpRoute(
name: "Get by name",
routeTemplate: "api/products/{name}",
defaults: new { controller = "ProductSearchApi", action = "GetProductsByName", name = string.Empty }
);
config.Routes.MapHttpRoute(
name: "Get by type",
routeTemplate: "api/products/{type}",
defaults: new { controller = "ProductSearchApi", action = "GetProductsByType", type = string.Empty }
);
Run Code Online (Sandbox Code Playgroud)
问题是查询字符串参数的名称似乎被忽略,因此第一个路径始终是使用的路径,无论查询字符串参数的名称如何.如何修改我的路线以使其正确?
我知道在大多数MVC框架中,例如,查询字符串参数和表单参数都可用于处理代码,并且通常合并为一组参数(通常使用POST优先).但是,根据HTTP规范进行是否有效?说你要发帖到:
http://1.2.3.4/MyApplication/Books?bookCode=1234
Run Code Online (Sandbox Code Playgroud)
...并提交一些更新,例如对图书名称为1234的图书名称进行更改,您希望处理代码将bookCode查询字符串参数考虑在内,并使用更新后的图书信息将POST表格参数更新.这是有效的,这是一个好主意吗?
我正在使用koa-router.
如何获取请求的查询字符串参数?
这是我设法写的最好的:
import koaRouter from 'koa-router';
const router = koaRouter({ prefix: '/courses' });
router.get('/', async (ctx) => {
console.log(ctx.qs["lecturer"]);
});
Run Code Online (Sandbox Code Playgroud)
但是qs未定义
任何帮助将深表感谢!
query-string ×10
asp.net-mvc ×2
c# ×2
javascript ×2
php ×2
asp.net ×1
decoding ×1
forms ×1
html ×1
http ×1
java ×1
koa ×1
koa-router ×1
node.js ×1
performance ×1
post ×1
postdata ×1
routing ×1
url ×1
urlencode ×1
variables ×1