1. URL에 들어갈 한글을 인코딩하기 (%-인코딩)
이곳 저곳 뒤져본 결과 제일 단순한 것은
$string =~ s!([^a-zA-Z0-9_.-])!uc sprintf "%%%02x", ord($1)!eg;
%-인코딩된 결과를 그냥 웹브라우저의 URL 입력칸에 넣으면 한글을 입력한 것과 동일하게 동작한다. 이것은 웹브라우저의 능력인지 웹서버의 능력인지 모르겠다. (아시는 분 가르쳐주세요~)
%-인코딩하지 않을 대상이 위 코드의 경우는
로 지정되어 있는데, 주인장이 UseModWiki소스수정, 특히나 UTF-8이전작업을 하려다보니 그 외에도 인코딩되면 안 되는 것들이 있다.
- "/" - UseModWiki소스수정/SlashLinks를 사용하는 경우에, 하위페이지를 구분하기 위한 "/"가 %-인코딩되어 있으면 404 Not found 에러가 난다. (사실 이건 도저히 이해가 안 감. "wiki.pl/페이지이름/하위페이지이름"은 wiki.pl을 제대로 호출하는데 "wiki.pl/페이지이름%2F하위페이지이름"은 안 될 이유가??)
- "?" - 마찬가지로, "wiki.pl?페이지이름"에서 물음표가 %3F 가 되면 404 에러
- "#" - URL뒤에 앵커로 붙을 때 "#"이 %-인코딩되면 인식이 안 됨
- "=" - "wiki.pl?action=rss"와 같은 경우. 사실 인코딩되어도 되긴 하던데, 보기에 너무 안 좋다. :-)
그래서 현재 이 홈에서는 아래와 같이 코딩하였음
$string =~ s!([^/?#=a-zA-Z0-9_.-])!uc sprintf "%%%02x", ord($1)!eg;
반대로 변환하는 경우 다음과 같이 하면 된다고 함. 써 본 적은 없음.
$string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
컴퓨터분류