저는 %문자를 만나면 임시로 2자리 int형 배열에 숫자를 집어넣고
16진수로 변경한 값을 char형 변수 escape에 저장하여 이를 문자로 찍어내는
방식으로 URI decoding을 구현했습니다.
제가 시험해본 예제는 다음과 같습니다.
예제
결과
%2a
-
%2525
%25
%25%25
%%
%2528
%28
%20
%21
!
%24
$
%28
(
%29
)
담안 검증을 위해서는 t1파일에 저장후,
URI < t1로 실행하였습니다.
80자리 문자열에 대비하여 한 줄에 크기 81자가 들어올수 있도록 하였습니다.
코드는 다음과 같습니다. 언어는 c이구요 우분투 14.04LTS 입니다
#include<stdio.h>#include<stdlib.h>intmain(void){intmax_strs=0;while((max_strs<1)||(max_strs>100)){scanf("%d[\n]",&max_strs);}max_strs*=81;char*strs=(char*)malloc(sizeof(char)*max_strs);inti,j;for(i=0;i<max_strs;i+=81){scanf("%s[\n]",strs+i);}for(i=0;i<max_strs;i+=81){for(j=0;j<81;++j){if(strs[i+j]=='\0')//80자 미만의 경우를 고려하라는break;//조 언 을 보고 추가하였지만, 여전히if(strs[i+j]=='%'){//오답 으로 처리됩니다 intk=0,tmp[2];charescape=0;for(;k<2;++k)if(strs[i+j+k+1]<58)//9다음tmp[k]=strs[i+j+k+1]-'0';elseif(strs[i+j+k+1]<71)//Etmp[k]=strs[i+j+k+1]-55;elseif(strs[i+j+k+1]<103)//etmp[k]=strs[i+j+k+1]-87;elsebreak;escape+=tmp[1]+tmp[0]*16;printf("%c",escape);j+=2;}elseprintf("%c",strs[i+j]);}printf("%c\n",'\0');//혹시나 해서 \0을 추가 했습니다}}
penguin
URI
URI문제
저는 %문자를 만나면 임시로 2자리 int형 배열에 숫자를 집어넣고
16진수로 변경한 값을 char형 변수 escape에 저장하여 이를 문자로 찍어내는
방식으로 URI decoding을 구현했습니다.
제가 시험해본 예제는 다음과 같습니다.
담안 검증을 위해서는 t1파일에 저장후,
URI < t1로 실행하였습니다.
80자리 문자열에 대비하여 한 줄에 크기 81자가 들어올수 있도록 하였습니다.
코드는 다음과 같습니다. 언어는 c이구요 우분투 14.04LTS 입니다
어딘가 문제가 있는 것은 확실한데 어디가 문제인지를 잘 모르겠습니다.
고수님들 도와주세요!
8년 전