mb_convert_encoding 을 이용해 인코딩 변환시 질문입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

mb_convert_encoding 을 이용해 인코딩 변환시 질문입니다. 정보

mb_convert_encoding 을 이용해 인코딩 변환시 질문입니다.

본문

변환 및 폼 부분
---------------------------------------------------------------------------------------------------------------
$mb_jumin1 = substr( $mb_jumin, 0, 6 );
$mb_jumin2 = substr( $mb_jumin, 6, 7 );

if (mb_detect_encoding( $_POST[mb_name] == 'utf-8' )) {

    echo "utf-8<br>";
    
    $mb_name1 = mb_convert_encoding($_POST[mb_name], "euc-kr","utf-8" );


} else {

    echo "euc-kr<br>";
    $mb_name1 = mb_convert_encoding($_POST[mb_name],"UTF-8", "euc-kr" );

}
$mb_ok_url = "http://new.bebeline.co.kr/wedy/bbs/register_form.php";
$mb_sirenid = "Axxxxx";
?>
<form name="siren" action="http://xxx.xxx.xxx/siren_test.php" method="post">
<input type=hidden name='name' size=10 maxlength=20 value="<?=$mb_name1?>">
<input type=hidden name='blank' value="">
<input type=hidden name='id' value="<?=$mb_sirenid?>">
<input type=hidden name='ok_url' value="<?=$mb_ok_url?>">
<input type=hidden name='jumin1' value="<?=$mb_jumin1?>">
<input type=hidden name='jumin2' value="<?=$mb_jumin2?>">
<input type=submit value="전송">
</form>
<?=$mb_jumin1?><br>
<?=$mb_jumin2?><br>
<?=$mb_name1?><br>
<?=$mb_sirenid?><br>
<?=$mb_ok_url?><br>
<? } ?>
---------------------------------------------------------------------------------------------------
siren_test.php 부분

<?
@extract($_POST);

if (mb_detect_encoding( $name == 'utf-8')) {
    echo "utf-8<br>";
    echo $jumin1."";
    echo $jumin2."";
    echo $name."";
    echo $id."";
    echo $ok_url."";
} else {
    echo "euc-kr<br>";
    echo $jumin1."";
    echo $jumin2."";
    echo $name."";
    echo $id."";
    echo $ok_url."";
}

?>
--------------------------------------------------------------------------------
위와 같은 페이지가 있습니다.
siren_test.php 페이지로 값을 mb_convert_encoding 함수를 이용해
utf-8 을 euc-kr 로 변환하여 보냈습니다.
그러나 받는 페이지에서 계속 문자값이 깨지길래
mb_detect_encoding 으로어떤 인코딩값이 오는가 살펴보았더니
utf-8로 값을 받는거 같습니다. 폼페이지는 에디트플러스에서 utf-8 인코딩으로
저장 하였고 받는페이지인 siren_test.php 파일은 ansi 로 저장 하였습니다
혹시나 해서 iconv() 함수도 테스트 해보았습니다만 결과는 마찬가지였습니다.
euc-kr 변환 쉬울줄 알았더니 의외로 힘들군요 ㅜㅜ 도와주세요
  • 복사

댓글 전체

실질적으로 siren_test.php 파일만 ansi 형태로 인코딩되어 있습니다.
나머지 페이지는 모두 utf-8 로 인코딩되어있구요.. 현재 제가 개발하는 페이지가 100만 회원을 관리 해야하기
때문에 php,apache,mysql 모두 utf8 로 셋팅되어 있습니다. 이유는 full-text 인덱스를 타야 원활한 쿼리속도가
나기 떄문이지요..
현재 막힌 문제는 서신평(siren24)에서 제공하는 실명인증 프로그램을 붙히는 도중에 생긴 문제입니다.
서신평측이 euc-kr 페이지를 사용하더군요... 국제 표준은 utf8인데도 말입니다 ㅜㅜ
인자 값을 euckr 로 정상적으로 컨버팅해서 보내야하는데 제대로 바뀌지 않는문제 입니다.
문자셋 변형으로 원하는 결과를 얻지 못했다면,
다음 게시물에 언급되어 있는 'photofly'님께서 언급하신
서버버전에 따른 부분도 체크해 보시기 바랍니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=24945


$mb_name1 = mb_convert_encoding($_POST[mb_name],"UTF-8", "euc-kr" );

===>>> utf8


원 게시물에는 언급되어 있지 않던 내용이,
(또는 타 유저로 하여금 단순한 encoding에 관한 부분이라고 착각할 수 있는 부분이)
코멘트에서는 인수값을 인코딩시켜 넘겨주는 부분을
좀 더 구체화시켜서 언급해 주셨군요.

또한 말씀하신 문제점에 대해 답변이 힘든 이유는,
siren24의 인증정보를 사용해 테스트하는 것입니다.
일반적인 유저의 입장에서는 사실상 테스트할 여건이 안되겠지요.
일단 실행(또는 오류출력 등)이 되어야 확인할 수 있고,
적절한 해결책의 방향을 결정할 수 있을테니까 말이죠.
답변 감사합니다. 서버 부분의 apache, php, mysql 등은 모두정상적인 세팅상태입니다 (psp,apache:utf-8 mysql:utf8)
siren24 측으로 인자를 보낼때에 원하는 결과가 나오지 않아 siren_test.php 라는 파일을 만들어 위처럼 테스트 해보았습니다만, '???퐝>' 처럼 $name 값이 깨져나오는 이유는 아직도 찾지 못했습니다.
phpschool과 sir.co.kr 에 모두 질문을 올렸지만 원하는 답변은 얻기가 힘들군요 ㅜㅜ 나스카님 말씀 백번 이해하고 있습니다 ㅜㅜ
아참 나스카님 마지막 답변에 ====>>utf8 이부분은..
---------------------------------------------------------------------------------
if (mb_detect_encoding( $_POST[mb_name] == 'utf-8' )) {

    echo "utf-8<br>";
   
    $mb_name1 = mb_convert_encoding($_POST[mb_name], "euc-kr","utf-8" );


} else {

    echo "euc-kr<br>";
    $mb_name1 = mb_convert_encoding($_POST[mb_name],"UTF-8", "euc-kr" );

}
---------------------------------------------------------------
현재 form이 있는 페이지 인코딩셋이 utf-8 이므로 조건 분기에서
  $mb_name1 = mb_convert_encoding($_POST[mb_name], "euc-kr","utf-8" );  ==> euc-kr 조건을
만족 하게 됩니다.. 따라서 $mb_name1 은 euc-kr 인코딩값으로 변환되어 siren_test.php 파일로 post 전송하게
되거든요..
siren_test.php 페이지에서 post 된 데이터를 받고
받은 데이터가 utf-8 로 출력됩니다.
if (mb_detect_encoding( $name == 'utf-8')) {
echo "utf-8";
} 부분...
$name 값은 브라우저상에서 utf8로 보게되면 문자가 깨져 출력되구요
euc-kr 에서도 깨져출력되는 현상입니다. '???퐝>'처럼 말이죠 ㅜㅜ
네 가능해야 할 부분처럼 보이나
실상 원하는 답이 아니라서 상당히 답답하실 듯 합니다.
그렇다면 iconv로 정상적인 컨버팅이 이루어지지 않고 있다고 볼 수 있겠네요.
(어차피 인증정보를 가져와서 컨버팅하는 과정, 재전송하는 과정까지의 기본흐름은 구현되었으나,
실제 컨버팅 부분에서 문제가 발생되고 있으니까요.)

제 경우 일부 자료(iconv로 스킨 또는 특정기능을 수행하는 단독의 소스파일 등)의 컨버팅시
정상적으로 컨버팅되지 않는 내용도 있(었)습니다.
(스킨자료의 일부, 라이브러리의 일부 등...)

어쩌면 유창화/불친절한서기 님께서 팁란에 공개해 주신 자료를 통해,
실마리를 발견할 수 있을지도 모르겠군요.
자답입니다.. 해결 봤슴돠 ㅜㅜ
php 다루면서 이번 처럼 황당한 경우는 처음 봤습니다 ㅡㅜ 아무래도 php 버그 인것 같습니다.
컨버팅페이지를 따로 폼페이지 따로 인자값받는 페이지를 따로따로 해주었더니 값을 제대로 받는군요..
이런경우는 듣도 보도 못했는데... 정말 오래살고 볼일입니다. ㅜㅜ
휘리릭 지나다가.. 봤는데요.. 물론 글도 다 읽지도  않고 // 해결을 보셨다니.. 그저 몇 마디 적습니다.

mb string을 설치한다고 고생을 좀 했는데... 그넘이 php에 잘... 알..
여기서 잘..알이란.. 정말 올바르게 설치가 되어야.. 작동을 잘합니다.

버그라기 보다는 함께 설치되어야 하는 옵션등이 올바르지 못해서 그럴수 있습니다.

multi byte지원이랑.. 또 뭐였더라.. 하여간 iconv도.. 그렇고 몇가지 함수들은.. 정확하게 몇개의 옵션이 같이 설정되어 설치가 되지 않으면.. 반쪽만 작동을 해서 그럴겁니다.
© SIRSOFT
현재 페이지 제일 처음으로