■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 最新50

プログラマが2chを救う!?2

266 :Sherry ◆RKMbxbuc :01/08/27 13:53 ID:P7yLS.2Q
新しいリンク方法を提案します.
これなら,かなりリンクの消費バイト数を減らせると思うのですが,いかがでしょ?

基本的に,数字は62進数になおします.
これで,3843 記事目までは2桁で表記できます.

スレ全体の指定は
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501
http://piza2.2ch.net/read.cgi/tech/998845501/

のように,PATH_INFO を使用するようにします.
こうすると,BASE指定などしなくても,記事番号だけでリンクが張れます.
記事番号の指定は以下のような感じで・・・

記事番号を指定する場合
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501&st=4&to=4&nofirst=true
http://piza2.2ch.net/read.cgi/tech/998845501/4
記事番号だけを書く.
リンクは,a href=4 で張れる.

記事番号を範囲で指定する場合
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501&st=4&to=6&nofirst=true
http://piza2.2ch.net/read.cgi/tech/998845501/4.6
開始と終了を . で区切る.

最新n記事は,
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501&ls=50
http://piza2.2ch.net/read.cgi/tech/998845501/-o
-50 のように指定.

index2.htmlなどから,一定範囲を表示し,nofirst=false にあたる場合は,
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501&to=100
http://piza2.2ch.net/read.cgi/tech/998845501/,1c

http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998845501&st=101&to=200
http://piza2.2ch.net/read.cgi/tech/998845501/1d,3e

このように , で区切る.
0 の場合は省略可能.

267 :Sherry ◆RKMbxbuc :01/08/27 13:53 ID:P7yLS.2Q
bbs.cgi対応も必要ですが,以前の方式と新しい方式両方をサポートするようにしていて,
旧形式でリクエストが来たら新方式にLocationで飛ばすようにすれば,
read.cgi側だけで強引に対応できると思います.

a href=read.cgi?bbs=tech&key=998845501&st=4&to=4&nofirst=true
から
a href=4
なので,そのくらいしても削減したほうがよいのではないかと.

268 :デフォルトの名無しさん :01/08/27 13:53 ID:IDmmApXc
無限ちゃんねるへようこそ
http://pesuo.hypermart.net/kkk/index2.html

269 :Sherry ◆RKMbxbuc :01/08/27 13:54 ID:P7yLS.2Q
最後に,10進数<->62進数変換のソース.


#include <stdio.h>
#include <stdlib.h>

#define CHARLIST "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define CHARLEN 62

int from62table[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0,
0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0
};

270 :Sherry ◆RKMbxbuc :01/08/27 13:54 ID:P7yLS.2Q
char *to62(int num)
{
char *dst;
char *p;
char tmp;
int len;
int i;

dst = malloc(6 + 1); /* 62^6 = 0xD398ED040 */
if(!dst) {
exit(1);
}

p = dst;
while(num)
{
*p++ = CHARLIST[num % CHARLEN];
num /= CHARLEN;
}

len = strlen(dst);
for(i = 0; i < len/2; i++)
{
tmp = dst[i];
dst[i] = dst[len - i - 1];
dst[len - i - 1] = tmp;
}

return dst;
}

int from62(char *numstr) {
int num = 0;

while(*numstr)
{
num *= CHARLEN;
num += from62table[*numstr & 0x7f];
numstr++;
}

return num;
}

int main(int argc, char *argv[])
{

if(argc != 2) {
fprintf(stderr, "usgae: %s 123\n\n", argv[0]);
exit(0);
}

printf("%s\n", to62(atoi(argv[1])));
printf("%d\n", from62(to62(atoi(argv[1]))));
exit(0);
}

272KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30