Shift_JIS 환경에서 일본어 5C문자 문제를 아십니까?

제목 : Shift_JIS 환경에서 일본어 5C문자 문제를 아십니까?

5C문자 문제는 Shift_JIS 환경에서 可能性、表示 등의 문자가 깨져 보이는 현상입니다.
아래 글은 PHP/제로보드 환경에서 위 문제를 해결한 글인데요.
다른 데도 적용해 보니 좋더군요.

참고 문서 1)
일본어 제로보드 41pl2 의 글쓰기,덧글에서 5c문자 관련 문자 깨짐 해소책
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=5&no=6974

참고 문서 2)
일본어 제로보드 41pl2 의 검색에서 5c문자 관련 검색 이상현상 해소책
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=5&no=6975

그리고 최근에 위 기사들과 달리 제가 더 깨달은 내용은,
PHP 환경설정 magic_quotes_gpc의 On/Off 여부에 상관없이,
아래와 같은 방법으로 5C문자 문제를 해결할 수 있다는 것입니다.

[예문 소스 : POST로 5C문자를 접수하는 부분]

if( get_magic_quotes_gpc() )
{
$seimei = stripslashes( $_POST['seimei'] );
}
else
{
$seimei = $_POST['seimei'];
}

[POST로 접수받은 5C문자를 DB에 입력하는 부분]

DB 입력시 mysql_escape_string 를 활용.
DBの入力時mysql_escape_stringを利用。
insert ....

[POST로 접수받은 5C문자를 화면에 입력하는 부분]

화면 출력시 htmlspecialchars 를 활용.
画面の出力時はhtmlspecialcharsを利用。

(이상입니다.)

출처 : http://www.4kg.net/bbs4kg/zboard.php?id=jpc_knowhow&no=2  (인용에 관한 허락을 받았습니다)

JAICジュン
다수가 만족하는 인프로 승부하자.
71년생, 好きな単語 : 通路、Messaging

Comment (10)|
Trackback (0)
|
印刷

2005.10.19-18:24 | 修正 | 削除
일본의 큰 IT회사들(라이브도어 등)은 서버쪽 캐릭터셋으로 EUC-JP를 많이 이용합니다.

그러다 보니 Shift_JIS를 사용 중인 다른 회사의 홈피와 연동할 때

종종 애를 먹는데요.

JCODE라는 유명한 모듈이 언어별로 있어 변환이 편하네요.

개인적으로는 아직까지 일본은 Shift_JIS 페이지가 더 많아 보입니다.

*** 2005.10.27-14:46 | 修正 | 削除
오기전에 공부를 했는데 막상 개발을 할때 도움이 되는 지식이 있습니다.

EUC-JP 는 DB와 리눅스 서버에 대해 기본 문자셋이고

Shift-JIS는 M$의 기준에 개발된 문자셋입니다..

윈도우에서 입력되는 문자셋은 모두 Shift-JIS라서..

떄론 EUC-JP로 개발된것은 모두 깨져 보이기도 합니다..

가장 좋은건 UTF-8 로 개발 되어야 겠지만 아직 잘 사용하지 않고 있구요

GOOGLE 등 웹표준을 기준으로 하는 기업은 모두 UTF-8로 개발 됩니다.

참고... 일본인들은 이메일을 받을때 모바일로 받는데..

모바일 경우 내용은 표시되지만 제목은 꺠집니다.

이에 별도의 엔코딩을 해줘야 합니다..

이상입니다. 개발 하시는데 도움이 되시길 바랍니다.

*** 2005.10.27-18:44 | 修正 | 削除
정**님. 나중에 소상히 그 문제를 함께 살펴보고 싶네요. (괜찮을런지)

저는 MySQL에 Java로도 PHP로도 다 해 봤는데,

削除 를 에디터플러스로 잘 입력이 되는 상황이라서... 혹시나 해서요.

윤** 2005.11.02-09:07 | 修正 | 削除
개발 컴터가 Unix, Linux계열이라면 히데마루를 추천합니다.

예전에 HP-UX사용 할 때도 전혀 문제가 안되었고

지금도 Linux에서 자동적으로 읽어들입니다.

FFFTP를 사용할 때 같이 사용하면 완벽합니다.

그리고 웹개발 하시려면 Nvu를 사용해 보세요.

Unix계열을 사용하시면 일반문서, 태그문서, 소스문서, 미리보기문서로

외부에서 원격으로 편집이 가능합니다.

JA 2006.04.22-00:09 | 修正 | 削除
일본에서는 문자깨짐을 文字化け 이라고 합니다.

모지바케, もじばけ。

JAI 2006.04.22-00:12 | 修正 | 削除
http://www.shtml.jp/mojibake/sjis_cgi.html

에 가면 5C문제에 관한 아주 자세한 설명이 있습니다.

JA 2006.07.19-14:23 | 修正 | 削除
JAVA로 5C 문자 검색 문제를 해결한 소스 예제입니다.

//サーブレットでjinjaiKeyを受け取る

} else if("search1".equals(action)) { // //////////////////////

// 会社名検索 キーワード

String corpKey = req.getParameter("corpKey");

// 求人情報検索 キーワード

String jobOfferKey = req.getParameter("jobOfferKey");

// 人材名検索 キーワード

String jinjaiKey = req.getParameter("jinjaiKey");

// 5C問題を解決

// jinjaiKey = jinjaiKey.substring(0,jinjaiKey.length());

jinjaiKey = jinjaiKey.replaceAll("ソ","ソ\\\\\\\\"); // 「ソ」を「ソ\\」とする

jinjaiKey = jinjaiKey.replaceAll("―","―\\\\\\\\"); // 「―」を「―\\」とする

jinjaiKey = jinjaiKey.replaceAll("噂","噂\\\\\\\\"); // 「噂」を「噂\\」とする

jinjaiKey = jinjaiKey.replaceAll("欺","欺\\\\\\\\"); // 「欺」を「欺\\」とする

jinjaiKey = jinjaiKey.replaceAll("圭","圭\\\\\\\\"); // 「圭」を「圭\\」とする

jinjaiKey = jinjaiKey.replaceAll("構","構\\\\\\\\"); // 「構」を「構\\」とする

jinjaiKey = jinjaiKey.replaceAll("蚕","蚕\\\\\\\\"); // 「蚕」を「蚕\\」とする

jinjaiKey = jinjaiKey.replaceAll("十","十\\\\\\\\"); // 「十」を「十\\」とする

jinjaiKey = jinjaiKey.replaceAll("申","申\\\\\\\\"); // 「申」を「申\\」とする

jinjaiKey = jinjaiKey.replaceAll("貼","貼\\\\\\\\"); // 「貼」を「貼\\」とする

jinjaiKey = jinjaiKey.replaceAll("能","能\\\\\\\\"); // 「能」を「能\\」とする

jinjaiKey = jinjaiKey.replaceAll("表","表\\\\\\\\"); // 「表」を「表\\」とする

jinjaiKey = jinjaiKey.replaceAll("暴","暴\\\\\\\\"); // 「暴」を「暴\\」とする

jinjaiKey = jinjaiKey.replaceAll("予","予\\\\\\\\"); // 「予」を「予\\」とする

jinjaiKey = jinjaiKey.replaceAll("禄","禄\\\\\\\\"); // 「禄」を「禄\\」とする

jinjaiKey = jinjaiKey.replaceAll("兔","兔\\\\\\\\"); // 「兔」を「兔\\」とする

// 「―」,「ソ」,「噂」,「欺」,「圭」,「構」,「蚕」,「十」,「申」,「貼」,「能」,「表」,「暴」,「予」,「禄」,「兔」

String jinjaiKey = page_data2.getJinjaiKey();

jinjaiKey = jinjaiKey.replaceAll("\\\\\\\\",""); // 文字化けのために付けていた「\」を全て除く。

// jinjaiKeyの表示部

人材名検索



 担当者

JA 2006.07.19-14:24 | 修正 | 削除
위 덧글의 소스 자료는 저희 기술진 스탭 중 한명인

吉崎(Yoshizaki)さん이 준비해 주었습니다.

JA 2006.11.02-09:54 | 修正 | 削除
음... 5C 문자의 검색 문제가 완전히 해결된 것 같습니다.

아래와 같이 처리하면 괜찮은 것 같습니다. 이유는?

http://kikitai.teacup.com/kotaeru.php3?q_id=2507492

를 참고해 주세요. GET / POST 동일 적용됩니다.

[주의 - POST로 접수받은 5C문자를 DB에 입력하는 부분]

DB 입력시 mysql_escape_string 를 활용.

DBの入力時mysql_escape_stringを利用。

insert ....

[예문 소스 : POST로 5C문자를 접수하는 부분]

if( get_magic_quotes_gpc() )

{

// 検索用

$seimei = mysql_real_escape_string( $_POST['seimei'] );

// 画面出力用

$seimei_disp = stripslashes( $_POST['seimei'] );

}

else

{

$seimei = $_POST['seimei'];

}

.... 이후 화면단에서는

echo htmlspecialchars( $seimei_disp );

로 표시부의 5C 문제가 완전히 해결됩니다.

검색단에서는

$seimei 를 그래도 이용해서 sql 문장에 넣으면 되겠습니다.

문자깨짐에 대한 대책으로 확실히 좋은 것은,

위와 같이 Shift_JIS 환경을 벗어나 UTF-8 로 코딩하는게

무난합니다.

댓글 쓰기

CAPTCHA
스팸방지를 위해 아래에 보이는 영문/숫자를 입력해 주세요.
Image CAPTCHA
Enter the characters shown in the image.