제 84번 포트 제로보드4 서버의 RSS에서 '힣' 가 XML 파싱 에러가 떠서 한참을 헤매었네요. 블록

XML 파싱 에러가 떴었던 포스트(현재는 임시로 '힣' 를 '히ㅎ' 로 고쳐놨네요): http://bit.ly/1FgeVHj

위의 해당 포스트를 보시면 아시겠지만 아래와 같은 소스코드 형태로 동작하는 코드를 설명하고 있는데 '힣' 라는 문자 때문에 84번 서버 메인페이지에서 커스텀 RSS XML 파싱할 때 "Could not load XML..." 에러가 뜨면서 페이지가 보이지 않습니다. 물론 지금은 '히ㅎ' 로 고쳐놓았기 때문에 에러가 뜨지 않습니다.

최근에 [스크랩] 에 올려놓았던 비밀글을 공개로 하고 [광고게시판]에 올려놓은 소스코드 상당수를 [네티즌칼럼] 으로 전부 옮겼는데 그 과정에서 이렇게 XML 파싱 에러가 뜨는 것을 인지하지 못했습니다. 이것 찾아내느라 포스트를 비공개로 돌리고 애먹긴 했지만 일단 원인을 찾아서 기분이 좋습니다. ^^;


[hangeul_scan1.html]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script>
function idCheck() {
    // 입력한 ID를 Check하기 위해 가져옵니다.
    var titleCheck = document.getElementById("titleId").value;
    // 정규표현식으로 한글만 선택하도록 만듭니다.
    var languageCheck = /[ㄱ-|-|-힣]/;
    // 입력한 ID와 정규표현식을 비교하여 한글 여부를 판단합니다.
    // test외에도 search ,exec , match등을 사용할 수 있습니다.
    if (languageCheck.test(titleCheck)) {
        alert("ID에 한글이 포함되어 있습니다.");
        return;
    } else {
        alert("ID에 한글이 포함되어 있지 않습니다.");
        return;
    }
</script>
<input type=text id=titleId><input type=button value=확인 onclick=idCheck()>
cs

덧글

  • 희망의빛™ 2015/06/14 15:43 # 답글

    http://www.blrun.net/ 과 81번 포트 서버는 RSS2.0 형태로 브라우저 확장프로그램의 RSS 리더로 읽어들여 보시면 아시겠지만 똑같은 포스트에서 에러가 뜨지 않습니다.
  • 희망의빛™ 2015/06/14 15:52 # 답글

    테스트는 각 서버 메인페이지 하단의 "RSS 2.0" 버튼을 클릭해 보시면 됩니다. ^^;
  • 희망의빛™ 2015/06/14 16:04 # 답글

    참고로 84번 포트 서버는 오드로이드-X ARM Linaro 우분투에 설치한 제로보드4 입니다. ㅡ_ㅡ
  • 희망의빛™ 2015/06/14 16:07 # 답글

    84번 포트 서버는 domxml-php4-to-php5.php 파일과 main.php 파일로 커스텀 RSS를 표시해 주고 있는데 이거 한글 파싱 에러 안뜨게 하는 방법이 없을까요? 간혹 잡문자가 들어가면 이렇게 당황스런 경우가 있어서 버그를 잡고 싶은데 잘 모르겠네요. ㅡ_ㅡ;
  • Polar Ice 2015/06/14 18:11 # 답글

    밸리핫글 조작좀 그만하셈
  • 안까진 펭귄 2015/06/14 21:58 # 답글

    왜 밸리 핫글 가는지 암?
    일단 혼자서 존나게 보고 다른애들이 지나가다 또 뭔 말도 안되는걸로 딴지 걸어놨나 궁금해서 들어가는거임.

    그냥 쉽게 말해서 지나가다 와 쟤 아직도 저러네 이러는거지.

    솔직히 이거 포스트 내용물 보러 오는게 아니라 글 하나 크게 팝콘까면 중간부터 논리가 와리가리 하면서 그런거 보는잼 아님?
  • .. 2015/06/15 04:48 # 삭제

    맞아용
  • blrun 2015/06/15 09:09 # 삭제

    이분 채소 관심법 가지신 분..
    블로그 주인이 오늘은 뭐 가지고 짖나 하면서 클릭하는데 어느세 핫글 ㅋㅋㅋ
  • Hide_D 2015/06/15 13:18 #

    ㅋㅋㅋㅋ 동의합니다. 제가 딱 그짝이라..
  • 래칫 2015/06/15 13:28 #

    ㅇㄱㄹㅇㅋㅋㅋ
  • Miyun_86 2015/06/15 13:33 # 삭제

    뒷북이지만, ㅇㄱㄹㅇ ㅋㅋㅋㅋ
  • 무명병사 2015/06/15 18:24 #

    그렇습니다...
  • Hide_D 2015/06/15 13:22 # 답글

    이놈의 망할 euc-kr은 언제 버릴참입니까..
    euc-kr에서 '힣'은 정식지원되지 않고 편법을 이용해서 출력되니, 당연히 안돌아갑니다.

    주인장 양반은 못 알아듣겠지만, 해당 글자는 EUC-KR에 속하지 않는 MS949 문자라 에러가 난단 소립니다.

    XML 출력할거면 utf-8로 출력하고, 원본 소스가 euc-kr인 경우엔 iconv나 mb_convert_encoding를 이용해서 변환하세요.
  • Miyun_86 2015/06/15 13:23 # 삭제

    웹에서 유니코드 못 쓴다고 굳게 믿는 분인데 더 말해서 뭐하겠습니까... 그냥 편법 쓰면서 신기술 적용 안되면 "다 니들 탓이야!!"라고 남의탓만 하는거 팝콘까면서 구경해주면 되지 않나요? 으흐흐.
  • Hide_D 2015/06/15 13:27 #

    Miyun_86 // 전 구경 잘 했으니 땔감이나 던져주는거죠 :)
  • Miyun_86 2015/06/15 13:33 # 삭제

    땔깜 던저줘봐야 자기 기준에서 눅눅하다고 던져버리는데 주시면... ㅋㅋㅋ
  • 희망의빛™ 2015/06/15 14:55 #

    Hide_D// old_rss2 폴더 소스 보셨는지 모르겠지만 main.php 36행 부분에서 $doc 부분을 아예 읽어오지 못하기 때문에 인코딩 변환을 어디서 어떻게 해야할지 모르겠다는 겁니다. 보시고 혹 아시면 어떻게 수정해야 할지 도움 부탁드립니다.

    <?
    // DomXML Function include
    if(PHP_VERSION>='5')
    require_once('domxml-php4-to-php5.php');

    // Get XML Data
    $url = "http://run.iptime.org:84/rss/zero_rss.php";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $xml = curl_exec($curl);
    $info = curl_getinfo($curl);
    curl_close($curl);

    // Parse XML Data
    if (!$doc = domxml_open_mem($xml)) {
    echo "Could not load xml...";
    } else {
    $items = $doc->get_elements_by_tagname("item");
    foreach ($items as $item) {
    ?>
  • Hide_D 2015/06/15 15:32 #

    zero_rss.php 맨 윗줄.

    <?xml version="1.0" encoding="EUC-KR"?>

    이걸 utf-8로 고치라는 소립니다.
    그리고 출력도 utf-8에 맞추고요.

    EUC-KR에 힣 같은 글자가 들어있으니 당연히 로딩 될 턱이 없죠.
  • Miyun_86 2015/06/15 15:34 # 삭제

    Hide_D님 // ......이해못할꺼 같은데요?
  • 조현병도풍년 2015/06/15 15:48 # 삭제

    euc-kr에선 힣이나 뷁 같은 언어는 지원 안된다고 몇 번을 말하냐?
    바보세요? 글 몰라요? 안구에 자기 보고 싶은 글만 보는 필터기라도 달려있나? 초월인류 시구만 아주.
  • 다져써스피릿 2015/06/16 00:48 #

    지금 이 페이지에서 힣이나 뷁 같은 글자를 쓸 수 있는거가 이 페이지 소스 맨위에 'charset=utf-8'라고 설정이 되어있어서라는건 얘기해봤자...... 소용없겠죠?
  • 오오 2015/06/16 06:37 #

    쉬운 방법을 지병으로 인한 고집때문에 어렵게 가시려 하다니...
    인코딩 바꾸ㅕ봤자 "바꾸ㅕㅆ다"가 안되므로 안된다고 하실지도
  • 희망의빛™ 2015/06/16 06:47 #

    Hide_D// 그렇게 xml 헤더 인코딩을 바꾸면 zero_rss.php 77행부터 244행까지 한글 출력 변수들은 전부다 iconv나 mb_convert_encoding로 문서내에서 다시 euc-kr 을 utf-8 로 변환해 줘야 한글이 깨지지 않게 되잖아요. zero_rss.php 파일 자체가 DB에 저장된 euc-kr을 가져와 작업하는 파일이라 한 문서 내에 두개의 인코딩이 동시에 존재하게 되어 소스가 매우 지저분해 질 것 같은데요... ㅡ_ㅡ;
  • 희망의빛™ 2015/06/16 07:15 #

    근데 XML로 출력하는 것 말고 euc-kr DB를 사용하는 제 제로보드4 게시판에 '힣' 라는 글자를 포스팅해 출력하면 제대로 출력이 됩니다. http://www.blrun.net/ 와 81번 포트 서버의 rss 도 똑같은 euc-kr 인데 '힣' 라는 글자가 출력이 되구요. 완성형 한글에 그 글자가 들어가 있는 것은 맞는것 같습니다. 다만 이상하게 오드로이드-X ARM 우분투 서버만 어떤 utf-8 환경과 관련이 있기 때문인지 이렇게 zero_rss.php 와 main.php 파일을 연동해 사용하는 과정에서 에러가 뜹니다. 한편으론 커스텀 rss 에서 인클루드해 사용하는 domxml-php4-to-php5.php 파일이 한글과 호환이 안되면서 발생하는 문제같아 보이기도 합니다.
  • Hide_D 2015/06/16 09:13 #

    희망의빛 // 그렇기 때문에 이제와서 새로 홈페이지 만들때 제로보드를 안쓰는겁니다!

    힣을 처리하고 싶으면 utf-8로 바꾸던가, 아니면 힣을 포기하고 euc-kr에 해당하는 문자가 아니면 버리던가 선택하시죠.
    원래대로라면 DB부터 바꿔야겠지만 RSS만 노가다해도 되니 얼마나 다행입니까 ㅋㅋㅋ

    + EUC-KR에 '힣'들어갔다는 헛소리 마시고... 아래에 Miyun_86님께서 잘 달아주셨네요. 이런 글자는 확장 완성형이자 euc-kr의 상위호환인 MS949(또는 MS 기준으론, CP949)에서만 볼 수 있는 코듭니다. 뭐 그게 아니면 &#을 이용한 표기를 써서 어거지로 보시거나..
  • 루루카 2015/06/16 09:51 #

    의외로 아예 처음부터 새로 만드는게 더 싸게 먹힐때가 많죠.
    기존것 어떻게라도 써보겠다고 조물거리다 결국 시간은 시간대로 버리고 결과는 결과대로 누더기가 되는 상황은 그리 낯선 광경이 아니거든요?
    물론 더이상 손 쓸수 없는 골동품 시스템을 버리지 못해 끌어 안아야 한다던지 현장 상황에 의해 피치 못할 경우도 있지만...
    지금 희망의벽™ 님은 그런 경우도 아니시잖아요?
    왠만하면 플랫폼 바꾸셔서 제대로 공부 하시면서 기본부터 다시 만드심이 어떨지?

    원작자가 포기할때는 그만큼 이유가 있지 않을까요?
  • Miyun_86 2015/06/16 10:02 # 삭제

    Hide_D님, 루루카님 // 그럴 의지가 있었으면 진작에 방향을 선회했겠죠...

    뭐, 개인적인 사견입니다만... 지금까지 보여준 주인장 성격 상 자기 노력이 부정당하는건 죽어도 인정 못할꺼라 봅니다. 물론 객관적으로 봤을때는 노력했다고 보기도 힘들긴 하지만요.
  • Miyun_86 2015/06/16 07:35 # 삭제 답글

    어지간하면 떠먹여줘도 모르는 부류라 적극적 개입은 자제할려고 했는데... 되도않은 소리 남발해서 낍니다.

    http://www.mkexdev.net/Community/Content.aspx?parentCategoryID=4&categoryID=14&ID=125

    http://m.blog.naver.com/bestdev/10014915998

    그 잘난 구글 검색 신봉자에 교차검증도 안하는 분께서는 이런 자료도 못 찾으세요? 출근중인 버스 안에서 5분안에 찾은 자료들입니다.

    이걸로 EUC-KR에서 "힣"이 처리된다는 (필터링중...) 소리는 때려시지죠.

    진짜 주인장 (필터링중...) 때문에 1년전 프리랜서로 쇼핑몰 php 페이지 유지보수한다고 손댔다가 6개월 하고 말았는데 다시 공부할까 고민중입니다. 되먹지도 않은 (필터링중...) 소리 좀 그만하게 만들게요. 이런 것도동기부여라고 해야 할까요? ㅡㅡ...
  • 희망의빛™ 2015/06/16 17:08 #

    링크해 주신 코드표 잘 보았는데요 그럼 EUC-KR DB에 저장하고 EUC-KR html 문서에서 표시한 다음 링크의 페이지는 왜 오류없이 잘 표시가 되는 것인가요? 두번째 페이지도 분명 EUC-KR 로 작성한 html 문서인데 말이죠. 그게 궁금합니다.

    http://bit.ly/1JRraBO
    http://www.blrun.net/eight/php/study/hangeul_scan1.html

    이 두 개 문서 다 EUC-KR 이잖아요. 첫번째 두번째 문서 다 힣 라는 글자도 들어가 있고... 코드표에 없는 한글이라면 표시 중 에러가 뜨든지 해아 하는데 첫번째 문서를 보시면 알겠지만 해당 MySQL DB 를 phpMyAdmin 으로 들여다 봐도 분명 euc-kr 캐릭터셋인데도 불구하고 샾 앜 넼 힣 ETX문자 들이 온전히 다 들어가 있는 걸 알 수 있습니다.

    리눅스나 우분투 혹은 윈도우즈가 한글 디코딩에 관한 어떤 예외 처리를 하여 보여준 것일까요? 문득 이게 궁금해지네요.
  • Miyun_86 2015/06/16 17:30 # 삭제

    그건 이제 주인장이 알아서 할 문제입니다. 제가 돈 받는 일도 아닌데 왜 솔루션을 찾아야하죠? 전 Hide_D님이 아닙니다.
    지금까지의 주인장 태도 보면 답을 줘도 제대로 적용 못하고 땡깡부리기에 감사인사는 고사하고 자기가 했다느니 어쩌니 하는 소리만 늘어놓는데 말이죠.

    조금이라도 개념이 있는 사람이였다면 제 시간 써서라도 솔루션을 찾아봐서 제공해드리겠지만, 주인장에게는 그럴 이유가 저~언혀 없으니 알아서 해보세요.
    뭐, 그러면서 프로그래밍 실력이 늘어나는게 아니겠습니까? 베끼기만 해서야 어디 늘겠나요. ㅋㅋㅋㅋ

    물론 스스로 하는게 프로그래밍이라고 생각하신다면, 이지만요. 프로그래머들만큼 지식공유 활발하게 하는 사람들도 찾기 힘든데 왜 오는 사람마다 주인장 못 잡아먹어서 안달인지는 이번 기회에 스스로 좀 생각해보시길 바랍니다.

    P.S. : 뭐, 이번 건 문제해결비용으로 10만원만 올려도 해결해주실분들 득달같이 나타나실껍니다. ^^ 주인장이 그만한 가치가 있다고 생각하시면 투자하세요~
  • Hide_D 2015/06/16 17:38 #

    헐 "전 Hide_D님이 아닙니다."라니 ㅠㅠ 저도 그렇게 친절한 사람 아닙니다.

    힌트는 위키 피디아에
    https://ko.wikipedia.org/wiki/KS_X_1001
    문서와 연결된 EUC-KR, CP949를 찬찬히 읽어보시면 알 수 있습니다. 모르면 말고.
  • Miyun_86 2015/06/16 17:33 # 삭제

    Hide_D님 // 에이, 저번에는 샘플코드까지 만들어주셨었잖아요. 물론 주인장이 엉터리로 적용해놓고 욕을 시전하긴 했지만.(......)
  • Miyun_86 2015/06/16 17:39 # 삭제

    Hide_D님 // 비로그인이라 부득이하게 댓글 하나 더 갑니다.

    ......아니, 또 힌트도 주세요? 님 정말 성인군자신듯....
    PHP 손뗀지 좀 되기도 했고, 주력으로 판게 아니라 기억도 안 나서 찾기도 귀찮아서 일갈하고 말았는데, Hide_D님이 이렇게 친절하게 힌트도 주시면 제가 뭐가 되나요 ㅜㅜ
  • 희망의빛™ 2015/06/16 18:49 #

    Hide_D// 기존 KSC-5601로 표현할 수 없었던 문자들을 CP949 추가 문자셋으로 표현하기 때문에 윈도우에서 리눅스의 mySQL euc-kr DB에 저장됐던 특수한 문자들까지 표현할 수가 있는 거였군요. 알듯말듯 구체적인 알고리즘은 모르겠지만 개념은 대충 오네요. 도움말씀 감사드립니다. ^^; 근데 XML 파싱시 오류가 나는 부분은 여전히 알 수가 없네요. XML이 UTF-8만 지원해서 그런것 같기도 하지만 10만원 주고 해결하기엔 제 총알이 많이 부족하네요. ㅋㅋ. UTF-8로 선언하고 인코딩 변환이란 노가다를 해볼 수도 있지만 그러면 소스가 너무 지저분해질거 같고... 쩝~ 근데 그렇게 하면 이 문제를 해결할 수가 있긴 있나요? 그것도 궁금합니다.
  • Hide_D 2015/06/17 10:49 #

    희망의빛 // 일단 XML 파싱 에러는 안날겁니다. '힣'이 제대로 나오느냐는 구현 방식에 따라.

    그리고 JavaScript의 문자열은 문서의 인코딩과는 상관없이 '항상' 유니코드로 동작하니, 당연히 http://www.blrun.net/eight/php/study/hangeul_scan1.html 의 정규표현식에서도 가-힣이 잘 동작합니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색