好的,所以我使用mod_rewrite和PHP编写了一个REST API实现.我通过HTTP DELETE请求(...集体呻吟?)接受一个查询字符串.关于前两个语句的智慧的争论不谈,我发现PHP不会自动解析DELETE请求的请求体(即,尽管形式编码的查询字符串出现在请求体中,$ _POST仍为空).这并不特别让我感到惊讶.我发现令人惊讶的是,我一直无法找到用于解析查询字符串的内置PHP函数?我只是忽略了什么?我可以这样做:
public function parseQS($queryString, &$postArray){
$queryArray = explode('&', $queryString);
for($i = 0; $i < count($queryArray); $i++) {
$thisElement = split('=', $queryArray[$i]);
$postArray[$thisElement[0]] = htmlspecialchars(urldecode($thisElement[1]));
}
}
Run Code Online (Sandbox Code Playgroud)
...奇怪的是,没有PHP内置来处理这个问题.另外,我怀疑我不应该使用htmlspecialcharacters和urldecode来擦除表单编码的值...这是一种不同的编码,但是我也无法识别我应该使用哪种PHP函数来解码表单编码数据.
任何建议将不胜感激.
我有这个查询字符串,将打开我的页面. http://www.a1-one.com/newpage.aspx?email=er@old.com&stuid=123456
现在当这个页面加载时,在page_load上,我想要收集两个不同的变量中的电子邮件和stuid.所以我可以使用它们插入我的数据库(sql server)如何在vb.net中完成
我需要将短消息发送到服务器.有时它们有特殊字符,如下例所示:
&message=Joining a game of Commands & Colors: Ancients.
Run Code Online (Sandbox Code Playgroud)
如何从查询字符串中转义特殊字符?
我正在使用Django.这是我需要编码的字段:
<textarea class="text-area" id="message" name="message" rows="3" cols="30">
Joining a game of {{ game.name }}.
</textarea>
Run Code Online (Sandbox Code Playgroud)
更新:我意识到POST正在通过JQuery的ajax函数:
$("#checkin-button").click(function() {
var mid = $("input#mid").val();
var message = $("textarea#message").val();
var facebook = $('input#facebook').is(':checked');
var name = $("input#name").val();
var bgg_id = $("input#bgg-id").val();
var thumbnail = $("input#thumbnail").val();
var dataString = 'mid='+mid+'&message='+message+'&facebook='+facebook+'&name='+name+'&bgg_id='+bgg_id+'&thumbnail='+thumbnail;
$.ajax({
type: "POST",
url: "/game-checkin",
data: dataString,
Run Code Online (Sandbox Code Playgroud)
所以我没有正确传递(urlencoded)对吗?
更新:在用JQuery意识到问题之后,我能够通过用以下代码替换数据变量赋值来修复它:
data: {"mid": mid, "message": message, "facebook": facebook,
"name": name, "bgg_id": bgg_id, "thumbnail": thumbnail}
Run Code Online (Sandbox Code Playgroud) 如何在Dart中安全地解析查询字符串?
我们假设我的q字符串值为:
?page=main&action=front&sid=h985jg9034gj498g859gh495
Run Code Online (Sandbox Code Playgroud)
理想情况下,代码应该在服务器和客户端都可以工作,但是现在我将满足于工作的客户端代码.
我有一个从表单中的循环创建的复选框(我不知道它们的数量).
<form>
<input type="checkbox" name="id" value="id">
<input type="checkbox" name="id" value="id">
...//create in a loop
<input type="checkbox" name="id" value="id">
</form>
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何阅读它们,如果我使用<?php $_REQUEST['id']; ?>它,它只读取最后一个复选框.
我在我的小网站上使用django压缩器,我不想在图像上使用查询字符串.例如images/header.png?9e1ed2cd7d15
有没有办法禁用它?
我不能说服Node.js看到我的URL中的第二个参数:
http://localhost:8888/cities?tag=123&date=2013-03-30T10:00:28.000%2B02:00
Run Code Online (Sandbox Code Playgroud)
我使用以下命令启动Node.js服务器:
node --debug ./router_rest.js
Run Code Online (Sandbox Code Playgroud)
我的"router_rest.js"文件中有以下代码:
require("http").createServer(function (req, res) {
// For PUT/POST methods, wait until the
// complete request body has been read.
if (req.method==="POST" || req.method==="PUT") {
var body = "";
req.on("data", function(data){
body += data;
})
req.on("end", function(){
return routeCall(req, res, body);
})
} else {
return routeCall(req, res, "");
}
}).listen(8888);
Run Code Online (Sandbox Code Playgroud)
我从命令行进行以下调用:
curl http://localhost:8888/cities?tag=123&date=2013-03-30T10:00:28.000%2B02:00
Run Code Online (Sandbox Code Playgroud)
当我调试并检查'req'参数时(在上面的匿名函数中),url属性显示为:
/cities?tag=123
Run Code Online (Sandbox Code Playgroud)
我原以为报告的网址是:
/cities?tag=123&date=2013-03-30T10:00:28.000%2B02:00
Run Code Online (Sandbox Code Playgroud)
即使我切换参数,节点仍然只能看到第一个.
为什么最后一个参数(即日期)被截断了?
我正在尝试按照以下说明调用Google的OAuth2身份验证服务:https://developers.google.com/accounts/docs/OAuth2ForDevices
我将所有必需的参数放入查询字符串并发送请求.这适用于"获取用户代码"部分,但不适用于"获取访问和刷新令牌"部分.
经过多次游戏并获得400 Bad Request错误后,我发现,您可以使用FormUrlEncodedContent创建请求,而不是将数据放入查询字符串中,并通过application\x-www-form-urlencoded将内容作为内容发送内容类型.
这是以前的代码:
var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(fullUrl);
Run Code Online (Sandbox Code Playgroud)
其中fullUrl是这样的:
https://accounts.google.com/o/oauth2/device/code?client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile
Run Code Online (Sandbox Code Playgroud)
新代码是:
var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(url);
requestMessage.Content = new FormUrlEncodedContent(CreateDictionary(queryStringNames, queryStringValues));
Run Code Online (Sandbox Code Playgroud)
网址是:
https://accounts.google.com/o/oauth2/device/code
Run Code Online (Sandbox Code Playgroud)
queryStringNames和queryStringValues是所需参数的名称和值的字符串数组.
这两种方法有什么区别?是否可以安全地假设所有POST调用都可以使用URL编码内容请求而不是将数据放入查询字符串中?
在我的一个位置规则中,我试图重写URL:
rewrite ^ $topicredirecturi?$args permanent;
Run Code Online (Sandbox Code Playgroud)
$topicredirecturi 在映射文件中计算,映射例如URL等
http://www.topics.com/companies/cit-group-inc/index.html
Run Code Online (Sandbox Code Playgroud)
至
http://www.topics.com/companies/cit_group_inc/index.html
Run Code Online (Sandbox Code Playgroud)
当我使用URL参数发出请求时,例如:
http://www.topics.com/companies/cit-group-inc/index.html?rss=1
Run Code Online (Sandbox Code Playgroud)
我得到以下带有重复参数的重写URL:
http://www.topics.com/companies/cit_group_inc/index.html?rss=1&rss=1
Run Code Online (Sandbox Code Playgroud)
同样,URL
http://www.topics.com/companies/cit-group-inc/index.html?rss=1&bob=2
Run Code Online (Sandbox Code Playgroud)
被改写为
http://www.topics.com/companies/cit_group_inc/index.html?rss=1&bob=2&rss=1&bob=2
Run Code Online (Sandbox Code Playgroud)
有人知道这里会发生什么吗?
我有一个"Thingy"控制器,看起来像:
[HttpPost]
public ActionResult DeleteConfirmed(long? id) {
// <Validate ID, delete associated records>
return RedirectToAction("Index", "Thingy");
}
Run Code Online (Sandbox Code Playgroud)
但是,RedirectToAction继续使用参数中的id填充其路由值,而我希望将id保留为null,以便将其重定向到www.mywebsite.com/Thingy而不是www.mywebsite.com/Thingy/1
事实上,我可以www.mywebsite.com/Thingy直接访问,它按预期工作.
我试过了:
RedirectToAction("Index", "Thingy")
RedirectToAction("Index", "Thingy", new { })
RedirectToAction("Index", "Thingy", new { id = (long?)null })
Run Code Online (Sandbox Code Playgroud)
最后一个特别有趣,因为它重定向到www.mywebsite.com/Thingy?id=1其他人重定向到的位置www.mywebsite.com/Thingy/1.
query-string ×10
c# ×2
django ×2
php ×2
rest ×2
api ×1
asp.net-mvc ×1
curl ×1
dart ×1
escaping ×1
formencode ×1
forms ×1
html ×1
html-input ×1
javascript ×1
jquery ×1
nginx ×1
node.js ×1
pageload ×1
post ×1
rewrite ×1
routevalues ×1
vb.net ×1
webrequest ×1