当前位置:首页>正文

在asp.net传递参数怎么过滤特殊字符 Linux curl,https get 地址里有特殊字符怎么处理

2023-06-28 02:30:59 互联网 未知

在asp.net传递参数怎么过滤特殊字符?

1.传递前先加密 ,KEY是你自己定义的,加密解密函数KEY一致。
public static string Encode(string str, string key)
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider()
provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8))
provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8))
byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str)
MemoryStream stream = new MemoryStream()
CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write)
stream2.Write(bytes, 0, bytes.Length)
stream2.FlushFinalBlock()
StringBuilder builder = new StringBuilder()
foreach (byte num in stream.ToArray())
{
builder.AppendFormat("{0:X2}", num)
}
stream.Close()
return builder.ToString()
}
2.获取参数后,解密
/// /// Des 解密 GB2312 ///
/// Desc string
/// Key ,必须为8位
///
public static string Decode(string str, string key)
{
try
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider()
provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8))
provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8))
byte[] buffer = new byte[str.Length / 2]
for (int i = 0 i < (str.Length / 2) i )
{
int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10)
buffer[i] = (byte)num2
}
MemoryStream stream = new MemoryStream()
CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write)
stream2.Write(buffer, 0, buffer.Length)
stream2.FlushFinalBlock()
stream.Close()
return Encoding.GetEncoding("GB2312").GetString(stream.ToArray())
}
catch (Exception)
{
return ""
}
}

Linux curl,https get 地址里有特殊字符怎么处理

先试试非特殊字符是否OK;如果OK,那应该就是url encode的问题了。
建议最后的URL用引号引起来:
https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml
非特殊字符的是OK的。

“ 建议最后的URL用引号引起来:
https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”
是这样吗:
curl --data-urlencode "\~\_!@$^&*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”
引用 3 楼 xiaoxiao_0223 的回复:非特殊字符的是OK的。

“ 建议最后的URL用引号引起来:
https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”
是这样吗:
curl --data-urlencode "\~\_!@$^&*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”

注意中英文,最好用单引号,双引号的话Shell还是会解析的。
引用 4 楼 lishanchao 的回复:Quote: 引用 3 楼 xiaoxiao_0223 的回复:
非特殊字符的是OK的。

“ 建议最后的URL用引号引起来:
https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”
是这样吗:
curl --data-urlencode "\~\_!@$^&*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\~\_!@$^&*.xml ”
注意中英文,最好用单引号,双引号的话Shell还是会解析的。

这个含特殊字符的URL解析不了,主要是因为有了一个反斜杠在里面,当没有反斜杠时是可以正常 get的,最后找到了解决的方法,不过是个比较笨的方法,命令是这样的,用 反斜杠 encode的值代替 加到URL里面:
curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/\~_!@$^&*#.xml -o sa003.xml
这里没有再用 --data-urlencode 这个参数了,因为 --data-urlencode后会在你的URL后面会多出一个问号:?;而是直接先将"\" encode,方法如下:
curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/ --data-urlencode "\"
用上面的命令可以得到"\"的 Unicode编码,会在命令下直接打出来的,能看到是"",得到这个值后,直接替换URL里面的反斜杠就好了。

js传参数受特殊字符影响错误

encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)

必选的 URIString 参数代表一个已编码的 URI。

说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、"" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。