作者oToToT (屁孩)
看板PHP
标题[请益] PTT aid to URL
时间Sat Aug 30 14:52:26 2014
※ [本文转录自 Web_Design 看板 #1K0NE34p ]
作者: oToToT (屁孩) 看板: Web_Design
标题: [问题] PTT aid to URL
时间: Sat Aug 30 14:47:15 2014
我看了看
http://opensvn.csie.org/pttbbs/trunk/pttbbs/mbbsd/aids.c
的code,发现如果要把文章aid转url的话会要用到unsigned但,JS跟PHP好像都没办法做
到,所以我用C稍微写了一下,却发现我有在用的几个hosting都不能跑外部执行挡,所以
也不能用C跑,不知道有没有人可以教我怎麽把aid转url。
--
1F:推 kai0817: [大笑]忘了洗碗水的人类08/22 16:16
2F:推 eyb602: 蟑螂:我就是看到洗碗水换人拿才冲出来的08/22 16:47
3F:→ eyb602: 话说你这样子只会教出比你更怕蟑螂的小孩08/22 16:48
4F:推 tcc440s: 所以五楼都吃蟑螂来交小孩不要怕蟑螂08/22 16:54
5F:→ tcc440s: 教08/22 16:55
6F:→ tcc440s: 干...早知道就不要改了......08/22 16:56
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.74.170
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Web_Design/M.1409381251.A.133.html
Code:
<?
$t = 0;
$str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_';
$tab;
$temp = "{";
while ($t <= 63) {
global $tab,$temp;
$temp = $temp."\"".$str[$t]."\" : ".$t.",";
$t++;
};
$temp = substr($temp, 0,-1)."}";
$tab = json_decode($temp);
function aidc2aidu($aidc) {
global $str,$tab;
$aidu = 0;
if($aidc == null)
return 0;
$temp = $aidc[0];
$i = 0;
while ($i<strlen($aidc)) {
$v = 0;
if(strstr($str,$temp) != FALSE)
$v = $tab->$temp;
else
return 0;
$aidu = $aidu << 6;
//echo ($aidu | ($v & 0x3f))."<br/>";
$aidu = $aidu | ($v & 0x3f);
$temp = $aidc[$i];
$i++;
}
return $aidu;
}
function aidu2fn($fn,$aidu){
global $str,$tab;
$type = (($aidu >> 44) & 0xf);
$v1 = (($aidu >> 12) & 0xffffffff);
$v2 = ($aidu & 0xfff);
if($fn == null)
return null;
$fn = (($type == 0) ? 'M' : 'G').".".$v1.".A.".$v2;
return $fn;
}
//echo aidc2aidu("1JHzal4T")."<br/>";
$aidu = ( (float) sprintf('%u', ( aidu2fn("",aidc2aidu($_GET["aid"])) )));
echo "
https://webptt.com/cn.aspx?n=bbs/".$_GET["board"]."/".$aidu.".html";
?>
※ 编辑: oToToT (123.193.74.170), 08/30/2014 21:29:59
7F:→ alphadog: 那个就只是aid表示的8位base64转48bits 08/31 01:11
8F:→ alphadog: 48bits取右边12bits和之上的32bits 08/31 01:14
9F:→ alphadog: 再把这2组资料转成数字拿来合成网址就行 08/31 01:17