压缩HTTP模块,可以转义内联脚本

时间:2009-03-27 20:24:06

标签: c# regex

我有压缩HTTP请求的HTTP模块。

public override void Write(byte[] buffer, int offset, int count)
{
    byte[] data = new byte[count];
    Buffer.BlockCopy(buffer, offset, data, 0, count);
    string html = System.Text.Encoding.Default.GetString(buffer);

    Regex reg = new Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}");
    html = reg.Replace(html, string.Empty);

    byte[] outdata = System.Text.Encoding.Default.GetBytes(html);
    _sink.Write(outdata, 0, outdata.GetLength(0));
}

如何转义所有内联脚本? 这是我的脚本正则表达式。

Regex reg = new Regex("<script[^>]*?>[\\w|\\t|\\r|\\W]*?</script>", (RegexOptions.Singleline | RegexOptions.IgnoreCase));

1 个答案:

答案 0 :(得分:1)

我真的怀疑你想要使用Encoding.Default,这是特定于你的系统的。除此之外,为什么不使用更标准的压缩方式,即gzip二进制数据而不是文本操作?我怀疑这会产生更大的影响,并且在意外破坏HTML方面几乎不会那么脆弱。此外,您不再需要担心编码。