ExpressionEngine을 한국 환경에서 사용하기

  • Post author:
  • Post category:
  • Post comments:11 Comments
  • Post last modified:February 6, 2023

몸이 살살 맛이 간다 싶더니만 어제는 기어이 앓아눕고 말았다. 실로 오랜만에 몸져 누운 셈이다. 아침에야 기운을 차리고 그동안 눈에 가시 같았던 문제를 해결하기로 마음 먹었다.

며칠 전에 겐도형이 감사하게도 티스토리 초대권을 보내준다고 하신 것을 거절했었다. 지금 사용하고 있는 ExpressionEngine에 만족하고 있었기 때문이다. 한데 거절한지 얼마 안 되서 겐도형 블로그에 트랙백 한 글이 깨지는 사태가 벌어졌다. 티스토리 초대권을 거절하고 나서 바로 일어난 일이라 무안하기도 했다. 겐도형 말대로 한국에서 개발한 태터로 옮겨가야 하는 것은 아닌지 심각하게 고민하는 계기가 됐다.

곰곰히 태터와 ExpressionEngine를 비교해 보고, 갈아타기 위해 무엇무엇을 해야 하는지 생각해봤다. 결론은 옮길 엄두가 안 난다였다. 그래서 이 문제를 직접 해결하기로 마음 먹었다.

서론이 길어졌으니 결론을 짧게 요약해 보겠다. 우선 트랙백이 깨지는 이유는 상위 아스키 코드로 문자를 변환하기 때문이다. 나는 [Admin/Global Weblog Preferences/Automatically Convert High ASCII Text to Entities]의 값을 no로 설정해 놓고, 인코딩은 utf-8, 그리고 로컬 환경은 Korean으로 해놨다. 그럼에도 불구하고 몇몇 모듈에서는 이런 설정값을 무시한다. 트랙백 모듈이 그 중 하나이다.

[system/modules/trackback/mcp.trackback.php] 파일을 열면 36행에 다음과 같은 변수 선언문이 있다.

var $convert_ascii = 'y';

$convert_ascii 값을 ‘n’으로 바꾸어주면, 태터나 기타 한국 블로그에 트랙백을 던졌을 때 정상적으로 처리된다.

참고

이 외에도 E메일 전송시 발신자와 제목을 잘못 인코딩하는 문제도 있다.

주의! 단순히 $convert_ascii 값을 ‘n’으로 바꾸는 것으론 안 된다. 태터와 똑같은 방식으로 트랙백을 보내기 위해 소스 코드를 조금 더 변경해야 한다. 아직 100% 확신할 수 없어서 수정한 소스 코드는 공개하지 않고 있지만, 만약 필요하다면 이메일로 연락해주길 바란다.

공지! ExpressionEngine의 트랙백 모듈을 한국 환경에 최적화하기라는 글을 참고하기 바란다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

11 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Mr.Learn
Mr.Learn
17 years ago

파일 내용에 소스에서
if ($this->convert_ascii == ‘y’ OR $PREFS->ini(‘auto_convert_high_ascii’) == ‘y’)

이렇게 컨트롤판넬에서 상위아스키 코드를 사용안함으로 하면 꼭 위에서 말씀 하신 것처럼 n로 안주어도 마찬가지로 작동이됩니다.

오늘 제가 갑자기 생각나서 트랙백을 수신을 시험하는데 수신은 되면 한글이 아래 웹로그처럼 이스케이스시퀀스된 10진코드(?)가 으로 저장된다는 것이 지금 문제네요. http://ee.winnwe.com/index.php/site/perma/16/

따라서 디비로 직접 들어간 문자나 관리자판넬에서 모두 저런 문자로되니까 내용을 알 수가 없습니다. 남의 보낸 트팩백을 수정할 이유는 없지만 제대로 utf-8이 아니라 이를 수정하려는데 잘 안되는군요.

http://ee.winnwe.com/index.php/site/perma/16/
여기서 말한 상위아시키코드 설정을 예로하면 마찬가지로 한글이 정상적으로 저장이 안되지요. 물론 브라우져에서는 한글이 보이지만 말입니다.

제가 웹프로그머는 아니지만 이게 이스케이프시퀀스 그 문제인듯 합니다. 해결책 제시가 되면 위에 웹로그에 코멘트 부탁합니다.

최재훈
17 years ago

상위하스키 코드를 사용 안함은 한국 환경에선 당연히 선택해야 하는 옵션일 것 같습니다. 저도 처음부터 사용 안 하도록 설정해놨습니다.

사실 정확히 문제가 되었던 부분은 상위하스키 코드를 사용 안함을 선택해놔도 10진코드로 트랙백이 전송된다는 점이었습니다. WordPress 등은 코드 변환을 다시 하는 것 같습니다만, 한국에서 주로 사용하는 태터나 이글루에서는 트랙백이 깨지더라구요. 그래서 $convert_ascii 값을 ‘n’으로 바꾸어서 10진코드 변환을 막은건데, 이것만으로는 불충분하다는 것을 사흘전에야 알았습니다. 트랙백 송신과 관련된 부분은 불완전하더라도 조만간 공개해 보겠습니다.

트랙백 수신과 관련해서는 전혀 소스 코드 수정을 해보지 않았습니다. 트랙백 메시지가 그렇게 많이 오지는 않기 때문에 그때그때 를 제가 직접 수정하고 있습니다.

Mr.Learn
Mr.Learn
17 years ago

웹프로그래머는 아니고 웹사이트 운영하다가 접한 PHP라 제가 정확하게 얘기할 수 없고 몇가지 테스트 한 사실을 적어보겠습니다. MS 스페이스와 네이버 뉴스 트랙백에 핑을 하면서 테스트 하니까 utf-8로 직접 전송할 경우 문제가 없더군요.

EE에도 직접 utf-8로 전송을 하니까 블로그의 최근 트랙백 목록과 관리자판넬에서 한글이 제대로 보입니다. mcp.trackback.php의 소스는 별걸 다 건들여봐도 직접적인 영향이 없습니다. 예를 들면 rawurlenide 또는 escape_str를 생략시켜 보았는데 문제는 계속 되더군요.

제가 테스트한 것은 Paul Burdick(http:www.reedmaniac.com)이 몇년 전에 트랙백 핑 소스를 공개한 PHP인데 당시 제로보드 트랙백 송수신 기능을 추가하면서 이용한 소스입니다. 지금은 pmachine.com에 개발팀으로 참여하고 있지요. 이 소스로 utf-8 인코딩 문자로 직접 블로거 이름, 블로그 이름, 발췌 내용을 전송하니까 제대로 들어가더군요.

URL은 urlencode()을 사용해서 전송하는 것이 표준으로 알고 있는데 핑 역시도 utf-8이 표준이라면 블로그웨어나 툴 기타 게시판들은 utf-8로 전송해야 한다는 생각입니다. 즉 URL만 urlencode()를 사용하고 블로그이름, 블로거이름, 내용발췌는 모두 utf-8로
전송해야 한다는 생각입니다. url은 영문은 괜찮지만 동양문자는 팬시URL 사용시 문제점도 있더군요.

부족하지만 테스트 내용은 아래에 기록해 놓았습니다.
http://ee.winnwe.com/index.php/site/perma/22/

아무래도 스페셜리스트께서 정확한 웹로그를 작성하시면 도움이 될 것 같습니다.

최재훈
17 years ago

음… 어차피 내일이 2년 반 동안 다닌 회사와의 악연을 끊는 날이니, 주말에 시간 내서 정리해 보겠습니다. 아차! 마소 원고도 아직 진행이 더디기 때문에 어찌될지 모르겠네요. 근 2주 동안 문서 스캔, 문서 파쇄, 봉투 접기 등 각종 잡일을 하는 바람에 의욕이 많이 꺾여서 해야 할 일이 많이 밀려버렸네요. -_-

Mr.Learn
Mr.Learn
17 years ago

바쁘신 모양이군요.
혹시 제가 테스트한게 발리 정리하시는데 도움이 될지도 모르까 적어보겠습니다.

위에 테스트는 utf-8코드를 가진 PHP에서 직접 변수에 한글을 입력한 상태로
넘긴것입니다. 예를들면
……
$blog_name=”윈앤위”.
……;

그리고 웹브라우져에서도 매개인자로 강제로 넘길시에
http://트랙주소목적지?url=….&blog_name=윈앤위….

실제 PHP에서 스트링변수 $blog_name=윈앤위는 결국
blog_name=윈앤위 이렇게 전송되는 것이겠지요.

제가 혼란스런운 것은 웹브라우져의 셋팅이 URL대해 utf-8 포스를 갖는다면
utlencode($blog_name)를 안해도
윈앤위으로 전송되는지 그런 문제가
혼란스럽습니다.
utf-8포스는 사용자마다 웹브라우져 설정이 다를 수 있기 때문에
자체 또는 원격 웹페이지 링크시 연결을 못하는 경우가 발생해서
저는 아예 EE에서 사용을 안하는 것이 좋다고 보고 사용을 안합니다.
영문은 아무거나 상관이 없지만요.

if ($this->convert_ascii == ‘y’ OR $PREFS->ini(‘auto_convert_high_ascii’) == ‘y’)
이것은 제가 논리값을 착각했네요. 수신시는 몰라도 발신시에는
영향이 가니까 or 대신 and 또는 셋팅을 no러 해야겠습니다.

지금 escape가지고 테스트중인데 혼란스럽습니다.

Mr.Learn
Mr.Learn
17 years ago

코드블럭이 없고 퍼센트기호가 안찍혀서 위에
urlencode가 이상하게 #x로 찍히네요.^^
그리고 CHAPTCHA에 트루폰트 적용이 안되서
어떤글자는 작아서 헷깔립니다. ㅎㅎ
그게 path버그던데… 편리하게 이런문제는
다 정리해서 ee.winnwe.com에 올리면
다른분들이 시행착오를 줄이고 시간을 절역할텐데 말입니다.
계속 되는대로 제가 올릴 생각입니다.

최재훈
17 years ago

원고 마무리 때까지는 조금 바쁠 것 같습니다. 작업이 끝나는대로 저도 트랙백 모듈을 다시 살펴보겠습니다. PHP는 트랙백 모듈을 수정하느라 최근에 벼락치기로 하루 공부한게 전부라서 조금 애먹지 않을까 싶네요. 

Mr.Learn
Mr.Learn
17 years ago

태그구름이랑 어제는 웹로그 본문에 연관키워드 연결하는 것 하다가
생각나서 오늘 제가 파이어폭스로 테스트를 해보니가
문제는 그거네요.

urlencode는 마땅히 하는게 표준이니까 하긴 하는데
이사람들이 2byte 코드를 가지는 동양문자권은 생각은 안하고

rawurlencode을 하니까 결과가 그렇게 esc처리된 10코드로
기록된다는 것입니다.^^
소스에서 EE에선느 rawurlencode를 그냥 urlencode로 차리하면
해결될거라는 생각입니다.
이코멘트 다음과 제가 urlencode로 전송을 해보겠습니다.
EE 콘트롤 판넬에서 열어사 한글이 제대로 들어가는 확인해 보세요.

최재훈
17 years ago

^^ 이제 저도 복무도 끝났겠다. 원고만 마무리하면 지금 하시는 작업에 동참하겠습니다. 열심히 테스트하고 계신 것 같은데 제가 도움이 안 되는 상황이라 안타깝네요.

조이아빠
16 years ago

안녕하세요,

구글에서 expression engine의 한글 문제로 검색하다가 찾아오게 되었습니다.

저도 Expression Engine을 이용하는데  wiki module에서 제목을 한글로 하면 꼭 깨집니다.

혹시 이런 일을 겪으셨는지, 또 해결책을 찾으셨는지 궁금합니다.

참, 그리고 저도 C. S. Lewis의 팬입니다. 안녕히 계세요.

정순욱 올림

최재훈
16 years ago

음… 저는 잘 되는 것 같습니다.

위키 주소를 알려주시면 HTML 소스 코드에 문제가 없는지 확인해 드릴 수 있습니다. 위키 자체에 문제가 있다면 확인하기가 좀 더 번거로워지긴 하겠지만요. ^^

P.S. ExpressionEngine 차기 버전이 준비 중이라고 해서 스킨을 안 고치고 있습니다. AJAX 기술 등이 도입된다고 하던데 기대되네요.