我需要通过 Cloudflare 等安全过滤器安全传输可能包含不间断空格(NBSP、Unicode U+00A0)的字符串。 此外,我正在寻找一种可能减少有效负载大小以提高效率的方法。 挑战是确保这些字符串不会失去其原始结构。
这是客户:
var encoded = window.btoa(encodeURIComponent("SELECT a FROM b"));
//U0VMRUNUJUMyJUEwYSVDMiVBMEZST00lQzIlQTBi
实际上“SELECT a FROM b”是“SELECT
NBSF
aNBSF
FROMNBSF
b”。
服务器端代码重现此字符串:
SELECT%C2%A0a%C2%A0FROM%C2%A0b
而最终的应该字符串应相同“SELECT a FROM b”。
var valueBytes = Convert.FromBase64String(value);
return Encoding.UTF8.GetString(valueBytes);
如何修改服务器端代码以将百分比编码的 NBSP(以及可能的其他字符)正确解码回原始形式? 有没有更有效的方法来减少有效负载大小? (这个不太重要)
解决了
Uri.UnescapeDataString
:
var valueBytes = Convert.FromBase64String(value);
var decodedString = Encoding.UTF8.GetString(valueBytes);
return Uri.UnescapeDataString(decodedString);