마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

php연동시 한글이 물음표로 나와요

0 추천
DB 테이블 안에는 한글이 잘 들어갑니다. 근데

php를 통해 안드 앱으로 한글값을 빼올때 ?? 물음표로 나와요

php Json값도 한글은 ???로 표시되구요

이건 어떻게 해결해야하는건가요 ㅠㅠ
익명사용자 님이 2016년 10월 27일 질문

2개의 답변

0 추천
encoding이 문제인것 같네요..

db 인코딩 설정 확인해 보시고, 안드에서 php로 전송 수신시에 인코딩 확인해 보세요.

보통은 utf-8로 하시면 될 것 같습니다.
mcsong (44,040 포인트) 님이 2016년 10월 27일 답변
안드로이드 앱에서 한글입력을 하면 DB table에는 한글값이 잘들어가요
그런데 DB에서 한글을 끄집어내서 안드앱에다가 setText를 하는데요
값들이 ubc14ubcf4 이런식으로 뜨고 있는데요 이것도 인코딩 디코딩 잘못해서 그런가요 ? 웹서버랑 php 안드로이드 다 utf8 로 다 설정 바꿧는데요
0 추천

php에서 json값을 출력할 때 아래 함수를 써서 출력해보세요~~

 

저도 같은 문제를 겪은적이 있어서요~~ 

 

아래를 써도 똑같이 나온다면

 

function my_json_encode($arr)

{

        //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding

        array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item,array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });

        return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

 

}

 

 

 

 

2번째방법으로 이거 써보세용~~ 이건 뭔지 아실거라 믿고 설명생략!

 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>
</body></html>

방랑자 님이 2016년 10월 27일 답변
전 안드앱으로 서버로부터 한글을 받아서 띄울려고하는데 2번째 방법도 해당되는건가요 ?
일단 점검하는 부분을 아셔야 될것같아요.

안드 <ㅡ> 웹 (php) <ㅡ> DB

위와 같이 데이터가 전송되는데 안드에서 DB로 가는건 이상이 없으시다고 하셨으니, 웹을 확인하셔야겠죠?

함수를 써서 해당 웹에 결과가 한글이 안깨지는지 확인해보시고요.
위 함수를 써도 웹에서 한글이 깨진다면 html코딩으로 charset을 다시 잡아주시면 됩니다.

안드가 읽어오는건 웹페이지일 뿐이지 웹이 안드로이드한테 직접 전달해주는게 아니에요. php를 이용해서 웹사이트에 결과를 뿌려주면 그걸 안드로이드가 읽어오는거죠.


웹을 먼저 확인해보세요. php코드에 POST말고 실제DB에 있는 것들로 강제로 입력해서 쿼리결과받아오게 하고 웹에 접속해보세요. 어떻게 결과가 출력되는지~

해보시고 답변주셔용~~~
웹상에서 값을 넣어서 Json 형식으로 출력해봣는데요
"p_contents":"uba4duccaduc5d0","p_firstimagename":"ud558ub098","p_secondimagename":"ub458","code_category":"CL"

이렇게 영어는 나오는데 한글부분이 유니코드로 나와버려서요

include_once 'config.php';
        $conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

        mysqli_set_charset($conn, 'utf8');

        #echo mysqli_character_set_name($conn)

        #$num = $_POST["post_number"];
        $num = "16";

        $sql = "select * from post where post_number = '$num'";
        $result = mysqli_query($conn,$sql);

       
        $listData;
        if(mysqli_num_rows($result) > 0)
        {
         $listData["list_length"]= array(length => mysqli_num_rows($result));
         while ($row = mysqli_fetch_assoc($result)) {

         $fields[] = array(
         u_code => $row["user_code"],
         p_title =>$row["post_title"],
         p_start => $row["post_start"],
         p_end => $row["post_end"],
         p_firstimage => $row["post_firstimage"],
         p_secondimage => $row["post_secondimage"],
         p_contents => $row["post_contents"],
         p_firstimagename => $row["post_firstimagename"],
         p_secondimagename =>$row["post_secondimagename"],
         code_category => $row["code_category"]
         );
         $listData["list"] = $fields;

         
         }
         echo stripslashes(json_encode($listData));
        }
        mysqli_close($conn);

php 코드 구요 ㅜㅜ
function my_json_encode($arr)

{

        //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding

        array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item,array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });

        return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

 

}

위 함수를 써서 사용해보시겠어요~~~?

$listData를 넣으면 될것같네용~
Json으로 띄어 봣을때 null이 뜨네요
$filed를 넣으면 어떻게 되나용~
필드 넣어도 널이 나와요
저랑 json데이터를 만든 방법이 달라서 흠....

혹시 일부로 위처럼 만드신건가요??

피씨로 한번 확인을 해봐야겠네여;;
저도 왜이런지 ㅠㅠ  php를 처음 해보는거거든요
메일이나 뭐 받아보실만한거 알려주시면 쉬운 소스 보내드릴게요;;;
...