我希望将querystring传值的值进行编码,如id=3036657c-277c-476c-982d-75f154e09050 我不希望以这样的方式显示
我原来使用Base64编码。但是Base64编码会出现‘+’号。这样以来+号将不能被正确的接受到。如:default.aspx?id=数据库
进行base64编码后的字符串为:default.aspx?id=yv2+3b/i。使用string qs = Request.QueryString["id"] 获得的值为yv2 3b/i。'+'号变成了‘ ’空格。
我现在希望通过一种方法进行编码,结果最好能定长,而且必须是由数字,字母组成的结果。什么样的编码方式能达到这个效果呢?

解决方案 »

  1.   

    使用HttpUntil.UrlEncode()进行编码
    参考
    http://www.cnblogs.com/dudu837/archive/2009/04/23/dudu.html
      

  2.   

    UrlEncode 不会对英文进行编码。如果我传值为guid。我也不希望用户看到guid的原文
      

  3.   

    http://baike.baidu.com/view/469071.htm  然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。   为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。   另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。   此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。 
      

  4.   

    HttpUtility.UrlEncode("a+b_-==='''");
    或者用JS的encodeURI();
    好象都成了
      

  5.   

    3楼给的链接为正解,将Base64编码算法自己实现,然后将/+两个字符替换成-*就可以了