-1

リンクをエンコードするオプションがあるフラッシュ プレーヤーを使用しています。以下のコードでそれらを正常にエンコードできますが、デコードする方法が見つからず、そのオプションを提供していません。

リンクはプレーヤーで機能していますが、リンクを編集する必要があるときに問題が発生します。通常のリンクの代わりに、エンコードされたバージョンが表示されます。

<?php
    function uppod_enc_replace($str){
            $uppod_tmp_a=Array('G','d','R','0','M','Y','4','v','6','u','t','i','f','c','s','l','B','5','n','2','V','Z','J','m','L','=');
            $uppod_tmp_b=Array('1','w','Q','o','9','U','a','N','x','D','X','7','z','H','y','3','e','g','T','W','b','8','k','I','p','r');
            $uppod_tmp=$str;
            $uppod_tmp_from=$uppod_tmp_a;
            $uppod_tmp_to=$uppod_tmp_b;

            for($i=0;$i<sizeof($uppod_tmp_from);$i++){

                $uppod_tmp=uppod_enc_replace_ab($uppod_tmp_from[$i],$uppod_tmp_to[$i],$uppod_tmp);
            }
            return $uppod_tmp;
    }
    function uppod_enc_replace_ab($a,$b,$tmp){
            $tmp=preg_replace('/'.$a.'/','___',$tmp);
            $tmp=preg_replace('/'.$b.'/',$a,$tmp);
            $tmp=preg_replace('/___/',$b,$tmp);
            return $tmp;
    }
    function uppod_encode($str,$lkey=''){
            $tmp=uppod_enc_replace(base64_encode($str));
            if($lkey!=''){
                    $tmpn=rand(0,strlen($tmp));
                    $tmp=substr($tmp,0,$tmpn).uppod_enc_replace(base64_encode($lkey)).substr($tmp,$tmpn);
            }
            return $tmp;
    }
?>

私がこれまでに試したこと:

switching places 
                    $uppod_tmp_from=$uppod_tmp_a;
                    $uppod_tmp_to=$uppod_tmp_b;
changing base64_encode to base64_decode 

テスト:

stackoverflow.com
encodes to:
HlQhUWXNwIbs8I6NwsgjVWor

changing base64_encode to base64_decode and switching places with $uppod_tmp_from=$uppod_tmp_a; $uppod_tmp_to=$uppod_tmp_b;
decodes to:
n!RB▒▒▒▒▒▒#Yj+[
4

2 に答える 2

2

関数をわずかに変更することによりuppod_enc_replace

function uppod_enc_replace($str, $direction = 'encode'){
    $uppod_tmp_a=Array('G','d','R','0','M','Y','4','v','6','u','t','i','f','c','s','l','B','5','n','2','V','Z','J','m','L','=');
    $uppod_tmp_b=Array('1','w','Q','o','9','U','a','N','x','D','X','7','z','H','y','3','e','g','T','W','b','8','k','I','p','r');
    $uppod_tmp=$str;
    if($direction == 'encode'){
        $uppod_tmp_from = $uppod_tmp_a;
        $uppod_tmp_to = $uppod_tmp_b;
    }else{
        $uppod_tmp_to = $uppod_tmp_a;
        $uppod_tmp_from = $uppod_tmp_b;
    }

    for($i=0;$i<sizeof($uppod_tmp_from);$i++){
        $uppod_tmp=uppod_enc_replace_ab($uppod_tmp_from[$i],$uppod_tmp_to[$i],$uppod_tmp);
    }
    return $uppod_tmp;
}

デコード関数は次のようになります。

function uppod_decode($str, $lkey = ''){
    if($lkey!=''){
        $eKey = uppod_enc_replace(base64_decode($lkey));
        $str = str_replace($eKey, '', $str);
    }
    return base64_decode(uppod_enc_replace($str, 'decode'));
}

テストケース:

$url = 'http://www.google.com/';

$encoded = uppod_encode($url);
$decoded = uppod_decode($encoded);

var_dump($decoded);

$key = base64_encode('p45sw0rd');

$encoded2 = uppod_encode($url, $key);
$decoded2 = uppod_decode($encoded2, $key);

var_dump($decoded2);

// outputs:
// string(22) "http://www.google.com/"
// string(22) "http://www.google.com/"
于 2012-10-20T11:24:04.490 に答える
0

エンコーディングスクリプトは次のことを行っています。

  1. base64_encode()
  2. いくつかの文字を切り替える

したがって、それをデコードするには、次のことを行う必要があります。

  1. 文字を元に戻す
  2. 後のbase64_decode()
于 2012-10-20T11:06:01.707 に答える