C 在golang中使用标点错误解析post数据

C 在golang中使用标点错误解析post数据,c,post,go,C,Post,Go,我知道如何解析golang中的post数据 r.ParseForm() pid := r.PostFormValue("pid") code := r.PostFormValue("code") lang := r.PostFormValue("lang") author := r.PostFormValue("author") 但是post数据是pid=1&code=#include\x0Aint main()\x0A{\x0A\x09printf(\x223\x5Cn\x22);\x0A\

我知道如何解析golang中的post数据

r.ParseForm()
pid := r.PostFormValue("pid")
code := r.PostFormValue("code")
lang := r.PostFormValue("lang")
author := r.PostFormValue("author")
但是post数据是
pid=1&code=#include\x0Aint main()\x0A{\x0A\x09printf(\x223\x5Cn\x22);\x0A\x09return 0;\x0A}&lang=c&author=11
(这是从nginx日志获得的)

因此,当我解析数据时,它可能是错误的。
code
的解析数据为

#include <stdio.h>
int main()
{
    printf("3\n")
#包括
int main()
{
printf(“3\n”)
而不是

#include <stdio.h>
int main()
{
    printf("3\n");
    return 0;
}
#包括
int main()
{
printf(“3\n”);
返回0;
}

那么我如何解决这个问题呢?

您正在传递原始代码,这可能是不安全的,您的问题是因为:

我建议您对日志代码进行base64编码,然后在处理程序中对其进行解码

导入“编码/base64”
...
代码,err:=base64.RawURLEncoding.DecodeString(r.PostFormValue(“代码”))
如果错误!=零{
//处理错误
}
那么您的请求应该如下所示:

curl --data "pid=1&code=I2luY2x1ZGUgPHN0ZGlvLmg-XHgwQWludCBtYWluKClceDBBe1x4MEFceDA5cHJpbnRmKFx4MjIzXHg1Q25ceDIyKTtceDBBXHgwOXJldHVybiAwO1x4MEF9&lang=c&author=11" http://localhost:8080

完整的问题不是因为当前的GO查询处理代码中的特定行,问题是有一个有限的字符集对于URL是安全的,并且在该SETYES中有许多保留字符,这是完全正确的,这就是我在回答的第一行中所说的,我只是展示了在何处以及为什么通过不安全的PAR。ameter导致了这个问题。也许它不是那么清楚,我会强调不安全的词。谢谢@JimB的评论