请教高手,如果将以下的代码转成php
private string getencoding(string str)
    {
        string[] Temp = str.Split('/');
        string Tempstr = "";
        for (int i = 0; i < Temp.Length - 1; i++)
        {
            Tempstr = Tempstr + Temp[i] + "/";
        }
        return getencoding1(Uri.UnescapeDataString(Tempstr)).Replace("%2F", "/") + getencoding1(Uri.UnescapeDataString(Temp[Temp.Length - 1]));
    }
    private static string get16(int value)
    {
        string ret = "";
        if (value < 10 && value >= 0)
        {
            return value.ToString();
        }
        else
        {
            switch (value)
            {
                case 10: ret = "A"; break;
                case 11: ret = "B"; break;
                case 12: ret = "C"; break;
                case 13: ret = "D"; break;
                case 14: ret = "E"; break;
                case 15: ret = "F"; break;            }
            return ret;        }
    }
    //处理数字转化为16进制表示
    private static string get10to16(int value)
    {
        string ret = "";
        if (value >= 16)
        {
            while (value >= 16)
            {
                ret = get16(value % 16) + ret;
                value = (value / 16);
                if (value < 16)
                { ret = get16(value) + ret; }
            }
        }
        else
        {
            ret = get16(value) + ret;        }
        return "%" + ret;
    }
    //将字符或中文用字节拆分,并转化16进制表示
    private static string getencoding1(string str)
    {
        byte[] b = Encoding.GetEncoding("gb2312").GetBytes(str);
        string ret = "";
        foreach (byte by in b)
        {
            try
            {
                ret += get10to16(Convert.ToInt32(by.ToString()));            }
            catch
            { }
        }
        return ret;
    } 

解决方案 »

  1.   


    <?php
    function getencoding($str)
    {
    $temp = explode('/',$str);
    $tempstr = "";
    for ($i=0; $i<count($temp)-1; $i++)
    {
    $tempstr .= $temp[$i].'/';
    }
    return getencoding1( str_replace("%2F","/",urldecode($tempstr) ) ) . getencoding1( urldecode($temp[count($temp)-1]) );
    }
    function getencoding1($str)
    {
    $ret = "";
    for ($i=0;$i<strlen($str);$i++)
    {
    $ret.=get10to16( ord($str[$i]) );
    }
    return $ret;
    }
    function get10to16($value)
    {
    $ret = "";
    if ($value>=16)
    {
    while ($value>=16)
    {
    $ret = get16($value%16).$ret;
    $value/=16;
    if ($value<16)
    $ret = get16($value).$ret;
    }
    }
    else
    {
    $ret = get16($value).$ret;
    }
    return "%".$ret;
    }
    function get16($value)
    {
    $ret = "";
    if ($value<10 && $value>=0)
    return "$value";
    else
    {
    $str = 'ABCDEF';
    return $str[$value-10];
    }
    }