我想在我的会员链接中添加一个谷歌adwords ID作为subid。问题是我的联盟计划不允许这么长的子ID。有没有办法缩短它?
例如,我从谷歌获得的ID如下所示:
jdfJHGsds57JHJsdkjjkskdfj324GFGHJ3334GHJ
所以我的链接看起来像这样:
www.mysite.com/?affofferid=jdfJHGsds57JHJsdkjjkskdfj324GFGHJ3334GHJ
我想通过编码或任何其他方法缩短谷歌ID。我怎么能这样做?
我希望以后可以手动将ID转换回原来的。
答案 0 :(得分:0)
看一下这篇文章:Shortest possible encoded string with decode possibility (shorten url) using only PHP
他能够将 39个字符 字符串编码为 30个字符 字符串并对其进行解码再次。
以下是编码功能:
function compress($input, $ascii_offset = 38){
$input = strtoupper($input);
$output = '';
//We can try for a 4:3 (8:6) compression (roughly), 24 bits for 4 chars
foreach(str_split($input, 4) as $chunk) {
$chunk = str_pad($chunk, 4, '=');
$int_24 = 0;
for($i=0; $i<4; $i++){
//Shift the output to the left 6 bits
$int_24 <<= 6;
//Add the next 6 bits
//Discard the leading ascii chars, i.e make
$int_24 |= (ord($chunk[$i]) - $ascii_offset) & 0b111111;
}
//Here we take the 4 sets of 6 apart in 3 sets of 8
for($i=0; $i<3; $i++) {
$output = pack('C', $int_24) . $output;
$int_24 >>= 8;
}
}
return $output;
}
解码功能:
function decompress($input, $ascii_offset = 38) {
$output = '';
foreach(str_split($input, 3) as $chunk) {
//Reassemble the 24 bit ints from 3 bytes
$int_24 = 0;
foreach(unpack('C*', $chunk) as $char) {
$int_24 <<= 8;
$int_24 |= $char & 0b11111111;
}
//Expand the 24 bits to 4 sets of 6, and take their character values
for($i = 0; $i < 4; $i++) {
$output = chr($ascii_offset + ($int_24 & 0b111111)) . $output;
$int_24 >>= 6;
}
}
//Make lowercase again and trim off the padding.
return strtolower(rtrim($output, '='));
}
他还建议通过加密和解密数据,在此过程中保护此信息的安全。
以下是调用上述函数的完整代码:
$method = 'AES-256-CBC';
$secret = base64_decode('tvFD4Vl6Pu2CmqdKYOhIkEQ8ZO4XA4D8CLowBpLSCvA=');
$iv = base64_decode('AVoIW0Zs2YY2zFm5fazLfg==');
$input = 'img=/dir/dir/hi-res-img.jpg&w=700&h=500';
var_dump($input);
$compressed = compress($input);
var_dump($compressed);
$encrypted = openssl_encrypt($compressed, $method, $secret, false, $iv);
var_dump($encrypted);
$decrypted = openssl_decrypt($encrypted, $method, $secret, false, $iv);
var_dump($decrypted);
$decompressed = decompress($compressed);
var_dump($decompressed);
你可以尝试一下。