网站来路乱码问题【转贴+修改,可以使用】

    技术2022-05-19  33

    using System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Text;using System.Text.RegularExpressions; 

     

     

    ///  调用  //

            string referer = RefererDecode("网址");        Response.Write(referer);        Response.Write("<br /><a href='");        Response.Write(referer);        Response.Write("'>点击查看</a>");        Response.End(); 

    /

     

    public string RefererDecode(string url)//来路解密,适用于baidu,google...调用这个就行    {        if (string.IsNullOrEmpty(url))        {            return "";        }        url = UrlDecode(url);        url = url.Trim();

            if (url.Substring(0, 4) == "http:")        {            return url;        }        int idx = url.IndexOf("http:");        if (idx == -1)        {            return url;        }

            string s = url.Substring(idx, url.Length - idx);        s += "&" + url.Substring(0, idx);

            if (s.Substring(s.Length - 1, 1) == "&")        {            s = s.Substring(0, s.Length - 1);        }        return s;    }

        private string UrlDecode(string url)    {        string result = "";        byte[] buf = GetUrlCodingToBytes(url);        if (IsUTF8(buf))        {            result = HttpUtility.UrlDecode(url, Encoding.UTF8);        }        else        {            result = HttpUtility.UrlDecode(url, Encoding.GetEncoding("GB2312"));        }        return result;    }

        private byte[] GetUrlCodingToBytes(string url)    {        StringBuilder sb = new StringBuilder();        int i = url.IndexOf('%');        while (i >= 0)        {            if (url.Length < i + 3)            {                break;            }            sb.Append(url.Substring(i, 3));            url = url.Substring(i + 3);            i = url.IndexOf('%');        }

            string urlCoding = sb.ToString();        if (string.IsNullOrEmpty(urlCoding))            return new byte[0];

            urlCoding = urlCoding.Replace("%", string.Empty);        int len = urlCoding.Length / 2;        byte[] result = new byte[len];        len *= 2;        for (int index = 0; index < len; index++)        {            string s = urlCoding.Substring(index, 2);            int b = int.Parse(s, System.Globalization.NumberStyles.HexNumber);            result[index / 2] = (byte)b;            index++;        }        return result;    }

        private bool IsUTF8(byte[] buf)    {        int i;        byte cOctets;        bool bAllAscii = true;        long iLen = buf.Length;        cOctets = 0;        for (i = 0; i < iLen; i++)        {            if ((buf[i] & 0x80) != 0) bAllAscii = false;

                if (cOctets == 0)            {                if (buf[i] >= 0x80)                {                    do                    {                        buf[i] <<= 1;                        cOctets++;                    }                    while ((buf[i] & 0x80) != 0);                    cOctets--;                    if (cOctets == 0)                        return false;                }            }            else            {                if ((buf[i] & 0xC0) != 0x80)                    return false;                cOctets--;            }

            }        if (cOctets > 0)            return false;        if (bAllAscii)            return false;        return true;    }


    最新回复(0)