c# - 为 QueryString 压缩大约 1000 字节的文本

标签 c# compression query-string

我想创建一种机制(在 C# 中),其中来自 QueryString 的文本显示在网站上。

例如,在 C# 中我可能真的会这样做;

public void Page_Load(blah)
{
      litSomething.text = Reques.QueryString["msg"];
}

假设消息是用英文写的(允许 UTF8 会更好),并且不超过 1000 个字符。我想尽可能地压缩此文本,并且仍然能够将它放在 QueryString 中。

我们可以根据需要预定义尽可能多的字典术语(有理由吗?)。服务器端代码将对消息进行编码和解码。

(显然,我将添加所有常用的 XSS 保护、HttpUtitlity.HtmlEncode 等类型的东西。指向免费字典资源的指针也很好!)

任何提示、建议、源代码?在你问之前,这不是我的作业!

更新
感谢您的建议。我想将其设为 GET,以便人们使用 IM/电子邮件 URL。我按照 bit.ly 的思路思考,这本身也是一种作弊。不过,我希望这是一个通用的“短文本压缩”问题。

最佳答案

您可以将字符串编码为 UTF-8,以便获得可以压缩的字节数组。结果也是一个字节数组,所以你可以使用 Base-64 编码将其作为字符串获取:

private static string Compress(string data) {
   using (MemoryStream ms = new MemoryStream()) {
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true)) {
         zip.Write(Encoding.UTF8.GetBytes(data), 0, data.Length);
      }
      return Convert.ToBase64String(ms.ToArray());
   }
}

解压正好相反:

private static string Decompress(string data) {
   using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(data))) {
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress, true)) {
         using (BinaryReader reader = new BinaryReader(zip)) {
            return Encoding.UTF8.GetString(reader.ReadBytes(10000));
         }
      }
   }
}

关于c# - 为 QueryString 压缩大约 1000 字节的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445634/

相关文章:

javascript - 将 URL 查询字符串解析为数组

javascript - 有效的查询参数 - 在 URL 中传递数据

c# - C# 中的 Microsoft Graph API 基本应用程序

c# - 如何在 ASP.NET 中将对象保存到 session 并在 View 中访问它

c# - 如何在 .NET 4.0 的 Entity Framework 中进行 "like"通配符比较?

java - 解压缩 BZIP2 存档

c# - 生成进程时如何重定向标准输出

压缩 HTTP

php - 流膨胀包装器?

php - PHP 会处理 $_GET 和 $_POST 中变量的字符编码吗? (PHP 5.4)