/IE버그의나비효과약 5년 전, 바야흐로 웹페이지의 인코딩이 euc-kr(또는 cp949)에서 슬슬 UTF-8이 대세가 되어가고 있었고, 이 홈페이지와 UseModWiki소스수정에도 그걸 반영하고 싶었으나... 일단 내부적으로 문자들을 처리하는 곳을 많이 뜯어고쳐야 했는데 당장 내가 인코딩이니 캐릭터셋이니 이런 거를 잘 몰라서 쉽지 않았다. 그래서 실제로는 2004년부터 유니코드 얘기를 하고는(유니코드논의) 3년이나 지난 후에 작업을 시작했음. 내부에서 위키페이지 텍스트를 처리하는 건 어찌어찌 할 수 있겠다 싶어서 본격적으로 UTF-8로 넘어가 보려고 했더니만, 원래 홈페이지에서 각 페이지의 URL은wiki.pl?페이지이름 이었는데,
wiki.pl/페이지이름 형태로 페이지 URL이 구성되게 했다.
그랬더니 뭐가 문제냐 하면, wiki.pl 이 파일이름이 아니라 디렉토리 이름으로 해석되고, 그 뒤에 페이지이름이 실제 파일인 것처럼 해석된다. 페이지 자체는 그렇게 해석되기 전에 처리하기 때문에 별 문제가 없었는데, 페이지 내에서 아이콘 이미지 등이 상대경로로 적혀 있으면 죄다 애먼 디렉토리에서 찾으려고 한다.
따라서 상대경로로 적힌 주소들은 ./icons/아이콘.jpg 에서 ../icons/아이콘.jpg 이렇게 한 단계 위로 끌어올려줘야 했다.
여기서 또 문제가 뭐냐 하면-_-;; UseModWiki는 하위페이지를 사용할 때 상위페이지와 구분하는 문자로 / 를 쓴다는 거다. 즉 wiki.pl/상위페이지/하위페이지 형태가 되어서, 슬래시가 하나 더 생겼다ㅠㅠ 즉 하위 페이지를 볼 때는 디렉토리가 한 단계 더 들어간 걸로 해석되어 버린다. OTL (? 를 쓸 때는 이 문제가 없었는데)
따라서 하위페이지냐 아니냐에 따라서 상대경로에 ../ 를 한 번 붙일지 두 번 붙일지 바꿔줘야 했는데, 이게 또 수정할 곳이 한두군데가 아니라서... 포기하고 아이콘,스타일시트,자바스크립트 등의 경로를 전부 절대경로로 지정하게 했다
그런데, 상대경로일 때는 위키를 서버의 어느 디렉토리에 설치하더라도, 그 디렉토리를 기준으로 찾아가니까 상관이 없는데, 절대경로로 표시하려면 설치하는 사람이 어느 디렉토리에 설치했는지를 적어주지 않으면 웹페이지 입장에서 알 방법이 없다. (pwd 등으로 스크립트가 존재하는 디렉토리의 절대 경로까지는 알 수 있지만, 웹브라우저에서 접근할 때는 그 중 어디까지가 URL에 들어가는 부분인지 모르니)
그래서 결국 $UrlPrefix 라는 변수에다가 http://gypark.pe.kr/cgi-bin/wiki/ 이런 식으로 URL의 앞부분을 적어주도록 했다. 그리고 wiki.pl 소스 내에서 아이콘,이미지 등등을 출력하는 곳에 다 이 변수의 값이 들어가도록 고쳤다.
여기까지가 2007년 UTF-8이전작업할 때의 사연이고,
5년이 지난 오늘, html에는 base 라는 태그가 있어서, 이 태그에 값을 주면 상대경로로 표시된 주소들을 전부 이 값을 기준으로 찾도록 강제할 수 있다는 걸 알았다... 게다가 이 UseModWiki에는 이미 그걸 고려한 설정 $SiteBase 도 들어 있었다!!!
그러면 $UrlPrefix 를 쓰지 않고 저 변수에 값만 넣어서 어떻게 해결할 수 있지 않았을까 싶기도 하다... (좀 전에 살짝 만져봤는데 그렇게 단순하게 해결되지는 않을 듯 하다만) 그래서 지금 살짝 망연자실 모드.
애초에 IE에 그 버그만 없었어도 그 수많은 삽질은 필요 없었을텐데ㅠㅠ 위키에서 하위페이지를 슬래시가 아닌 다른 기호로 표시했다면ㅠㅠ 내가 저 base 태그에 대해 알고 있었더라면ㅠㅠㅠㅠ
-- Raymundo 2012-1-30 5:38 pm
Comments & Trackbacks뭐 그래도... 그 덕분에 요청이 euc-kr로 들어와도 utf-8로 들어와도 처리할 수 있게 수정도 했고... 예를 들어 위키피디아는 euc-kr로 페이지 이름을 요청하면 없는 페이지라고 안 뜨지만 내 홈페이지는 잘 뜬다고... 으쓱-- Raymundo 2012-1-30 5:49 pm
주인장분류 |
Diary최근 글들
코멘트와 트랙백
옛 글들RSS주요 페이지
이 홈페이지의 인터위키는 다음과 같습니다. GyparkWiki UTF-8 https://gypark.pe.kr/wiki/ |