我有如http%3A%2F%2Fwww%2Ewikimoveis%2Ecom%2Ebr%2Ffotos%2F1292%2FKO2551%2FDSC01366%2EJPG一个URL
我需要让它正确解码.我相信这是十六进制的.找不到任何能够做到这一点的C#代码.
谢谢
我正在尝试由多字字符串构成一个URL:
$str = "my string"
Run Code Online (Sandbox Code Playgroud)
而我试图得到:
"http mysite.com/search/my%20string"
Run Code Online (Sandbox Code Playgroud)
但我无法使用PHP做到这一点。
urlencode($str) => "my+string"
rawurlencode($str)=>"my string"
Run Code Online (Sandbox Code Playgroud)
我怎么能得到"my%20string"?
谢谢你的帮助 !
也许我可以做,str_replace(urlencode(),etc);
但是urlencode是否有一个参数,这样它本身就可以正确转换?
事实证明,正如Amal Murali所说的那样,rawurlencode()确实如此,当我将鼠标悬停在链接上时,在浏览器中看不到它。
但是,当我检查源代码或单击链接时,会看到rawurlencode();生成正确的链接。(带有%20。)。
假设我想使用以下请求curl:
https://api.foobar.com/widgets?begin=2018-09-10T01:00:00+01:00&object={"name":"barry"}
Run Code Online (Sandbox Code Playgroud)
该字符串的 URL 编码版本如下所示:
https://api.foobar.com/widgets?begin=2018-09-10T01%3A00%3A00%2B01%3A00&object=%7B%22name%22%3A%22barry%22%7D
Run Code Online (Sandbox Code Playgroud)
当然,当我在命令行发出请求时,我更愿意查看外观更漂亮(但不是 URL 有效的)的第一个版本。我正在考虑使用一个bash脚本来拆分好的版本的不同部分,对相关部分进行编码,然后将其重新粘在一起,这样我就不必担心了。
例如,在对 , 进行几轮简单拆分?后&,=我可以轻松获得:
https://api.foobar.com/widgetsbegin2018-09-10T01:00:00+01:00object{"name":"barry"}之后,URL 对查询字符串的两个值进行编码并将它们全部粘在一起。我接受查询字符串中&和 的任何出现=都会破坏这种方法。
还有什么我应该担心的,可能会使这成为一个特别愚蠢的想法吗?
我使用了一个我在这个问题中找到的函数,适用于用"%20"替换所有空格(可能会更有效地完成!):
## Heading ##std::string Main::SpacesForWeb(std::string text) {
for (std::string::iterator it = text.begin(); it != text.end(); ++it) {
if (*it == ' ') {
*it = '%20';
}
}
return text;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它用于字符串时Local Live Test Server,输出是这样的:

我的最后一个问题涉及string的问题,并发现string被typedef编为指向内部CryString在游戏SDK类型我使用(Cryengine2引擎).我现在正在使用std::string以解决这个问题.
此问题也反映在我转换发生后使用的数据库中,并将数据发送到数据库:

为什么我不能%20以这种方式使用(也许还有其他URL编码符号),我怎样才能使它工作?我试图对此进行一些研究以便自己解决这个问题,但是没有任何相关内容出现.
我已尝试使用*it = (char)"%20";原位*it = (char)"%20";,但是这实际上删除了0出现在字符串中而不是替换空格%20.
我有一个base64编码的字符串,我试图用go解密.该字符串包含应忽略的空格.我正在尝试的示例代码:
s := "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjEzZmU3MWQ0LWQxMGQtNDIyMC1hMjE2LTIwMDZkMWRkNGNiOCIsImFjc1RyY++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++W5zSUQiOiJkN2M0NWY5OS05NDc4LTQ0YTYtYjFmMi0xMDAwMDAwMDMzNjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0%3D"
out, err := base64.URLEncoding.DecodeString(s)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))
Run Code Online (Sandbox Code Playgroud)
此代码返回:
输入字节93处的非法base64数据
更改字符串填充后,使用StdEncoding而不是URLEncoding:
s= strings.Replace(s, "%3D", "=", -1)
out, err := base64.StdEncoding.DecodeString(s)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))
Run Code Online (Sandbox Code Playgroud)
输出将是:
{ "threeDSServerTransID": "13fe71d4-D10D-4220-a216-2006d1dd4cb8","acsTrc NSID ":" d7c45f99- 9478-44a6-b1f2-100000003366" , "为messageType": "CREQ", "messageVersion": "2.1.0", "challengeWindowSize": "02"}
如何正确解密字符串?