본문 바로가기
나의 생각/낙서장

[질문] metaWeblog로 읽어올때 한글이 깨지는데 해결 방법이?

by 상오기™ 2009. 8. 23.
BlogAPI를 이용해 원격에서 티스토리에 글쓰는걸 테스트하고 있습니다.

한글이 깨지는 문제가 있는데 해결 방법을 아시는분 계시면 도움 부탁 드립니다 ^^


http://phpXMLRPC.sourceforge.net 

이곳에서 xmlrpc.inc를 받아 PHP로 테스트를 하다가 몇가지 문의사항이 있어 질문 드립니다. 

metaWeblog.newPost (blogid, username, password, struct, publish) 
metaWeblog.editPost (postid, username, password, struct, publish) 
metaWeblog.getPost (postid, username, password) 
metaWeblog.newMediaObject (blogid, username, password, struct) 
metaWeblog.getCategories (blogid, username, password) 
metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts) 



질문 1. 데이터를 읽어올때 한글이 깨져서 보임 

현재 이 API를 이용하여 하나씩 테스트를 하는데 글등록시엔 한글이 정상적으로 입력이 되는데 editPost, getPost, getCategories, getRecentPosts등으로 데이터를 읽어올때 한글이 깨져서 보입니다. 

해결해보려고 이것저것 하고 있는데 해결이 되질 않네요 ^^; 

현재 테스트하고 있는 소스의 일부분 입니다. 

테스트 주소 => http://gpson.kr/xmlrpc/ 

$GLOBALS['XMLRPC_internalencoding'] = 'UTF-8'; 

function metaWeblog_newPost($blogid, $title, $content, $tags, $category="") { 
global $g_id; 
global $g_passwd; 
global $g_blog_url; 

$client = new XMLRPC_client( "{$g_blog_url}"); 
$f = new XMLRPCmsg("metaWeblog.newPost", // metaWeblog.newPost method 
array( 
new XMLRPCval($blogid, "string"), // blogid. 
new XMLRPCval($g_id, "string"), // user ID. 
new XMLRPCval($g_passwd, "string"), // password 
new XMLRPCval( // body 
array( 
'title' => new XMLRPCval($title, "base64"), 
'description' => new XMLRPCval($content, "base64"), 
'category' => new XMLRPCval($category, "base64"), 
'mt_keywords' => new XMLRPCval($tags, "base64") 
), "struct"), 
new XMLRPCval(false, "boolean") // publish 

); 

$f->request_charset_encoding = 'UTF-8'; 

$response = $client->send($f); 

return $response; 


function metaWeblog_getPost($postid) { 
global $g_id; 
global $g_passwd; 
global $g_blog_url; 

$client = new XMLRPC_client( "{$g_blog_url}"); 
$f = new XMLRPCmsg("metaWeblog.getPost", // metaWeblog.getPost method 
array( 
new XMLRPCval($postid, "string"), // postid. 
new XMLRPCval($g_id, "string"), // user ID. 
new XMLRPCval($g_passwd, "string"), // password 

); 

$f->request_charset_encoding = 'UTF-8'; 

$response = $client->send($f); 

return $response; 


위의 함수를 이용하여 글을 등록할땐 한글이 정상적으로 입력이 되고 metaWeblog_getPost() 함수로 읽어올때 아래와 같이 한글이 깨져서 보입니다. 

$description = $get_result->val->me["struct"]["description"]->me["string"]; 

데이터 값은 이런식으로 받아왔습니다. 

결과값 

5266-10 글 읽기 
link : http://blog.gpson.kr/10 
permaLink : http://blog.gpson.kr/10 
postid : 5266-10 
categories : 
title : Blog API ??? ? 
description : ??? ???? 
??? ????? 
mt_keywords : tag1,tag2,???? 
publish : 0 
dateCreated : 2009-08-23T15:41:31+09:00 


한글 처리를 어떻게해야 하는지 도움 부탁 드립니다 ^^ 



질문 2. 글 등록시 카테고리가 적용이 되질 않음 

getCategories로 카테고리를 읽어오는건 정상적으로 동작을 합니다. 

카테고리 수 : 4개 
[0] categories : flickr 
[1] categories : test 
[2] categories : ?????? 
[3] categories : ??? 

$post_result = metaWeblog_newPost($g_blog_id, "Blog API 테스트 글", "한글은 안되나?<br />태그도 <b>먹히겠지?</b>", "tag1,tag2, 한글태그", "test"); 

위와 같이 카테고리를 test로 설정해서 입력하면 지정한 카테고리로 저장이 되지 않습니다. 

현재 카테고리 지정은 안되는 기능 인가요? 




질문3. 이건 어떤 차이 인가요? 

같은 소스로 티스토리와 텍스트큐브닷컴을 테스트해보면 반환되는 값에 조금 차이가 있네요. 

티스토리의 경우 
[raw_data] => HTTP/1.1 200 OK 
Date: Sun, 23 Aug 2009 07:01:51 GMT 
Server: Apache 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 474 
Connection: close 
Content-Type: text/xml 

����N1�_e�H� 
!M�q�*�PUܑ�k6�ze��E�Bj/Hh�C�r����;�,۴IU�2^�g~3��;�{��w:ީ�5\�x�P��N%��j�ҥDq��� 
���-�$a�)[���0�:��0�V=n(���T����I���>@�A(J��k ,h3�Z�&AEAE 
�3��n{���.�7q�Ū�����ȋa���x4�~zӫ�ɧ�������Z�ٻ�����{/��\�۟ٗ������a�r���i�;��V��hWW� H��'u��~�e.�߲�����n��Ζ;���k��V�q��[�����`����vc�~�]R5p�6��RQf�ͱ��p.Q;�Ia�%�hPמ�K�2)��a�4+7���?@���s��ڄeBq��"Ù��ë~x��r4�;�\A�9�J���-^�*� 



텍스트큐브닷컴의경우 
[raw_data] => HTTP/1.1 200 OK 
Date: Sun, 23 Aug 2009 07:01:12 GMT 
Server: Apache 
Content-Length: 1200 
Connection: close 
Content-Type: text/xml 

<methodResponse><params><param><value><struct><member><name>link</name><value><string>http://blog.gpson.kr/12</string></value></member><member><name>permaLink</name><value><string>http://blog.gpson.kr/12</string></value></member><member><name>userid</name><value><string>7722</string></value></member><member><name>description</name><value><string>한글은 안되나?&lt;br /&gt;태그도 &lt;b&gt;먹히겠지?&lt;/b&gt;</string></value></member><member><name>postid</name><value><string>5266-12</string></value></member><member><name>title</name><value><string>Blog API 테스트 글</string></value></member><member><name>dateCreated</name><value><dateTime.iso8601>2009-08-23T16:01:09+09:00</dateTime.iso8601></value></member><member><name>categories</name><value><array><data></data></array></value></member><member><name>publish</name><value><i4>0</i4></value></member><member><name>mt_allow_pings</name><value><i4>1</i4></value></member><member><name>mt_allow_comments</name><value><i4>1</i4></value></member><member><name>mt_keywords</name><value><string>tag1,tag2,한글태그</string></value></member></struct></value></param></params></methodResponse> 



한글 인코딩 문제가 해결 안되면 반환되는 데이터중 raw_data를 읽어서 처리를 할까 했는데 텍큐닷컴은 한글이 정상적으로 반환되는데 티스토리는 raw_data 값이 알수없는 문자로 나옵니다. 

티스토리엔 Content-Encoding: gzip 으로 되어 있어서 그런 건가요? 

같은 소스인데 이런 차이가 나는것은 서버에서 처리해주는게 다르기 때문인것 같은데 별도로 수정할 방법이 있는지 궁금 합니다. 


글이 길어서 잘 전달되었는지 모르겠네요 ^^; 

감사 합니다 ^____^



첫 댓글로 알려주신 우렁씨님의 도움으로 해결이 되었습니다.
감사 합니다 ^__^

1. 한글 인코딩 문제

xmlrpc.inc 에서 UTF-8로 변경을 해주면 되는군요.

$GLOBALS['xmlrpc_internalencoding']='UTF-8'; //'ISO-8859-1'; 


2. 카테고리 문제

카테고리는 배열로 보내 주어야 하고 category 가 아닌 categories 입니다 ㅡㅡ

'categories'    => new XMLRPCval(array(new XMLRPCval('test',"base64")), "array"),

5266-7 글 읽기
link : http://blog.gpson.kr/7 
permaLink : http://blog.gpson.kr/7 
postid : 5266-7 
categories : 테스트 
title : 카테고리 테스트 글 
description : 한글은 안되나?
태그도 먹히겠지? 
mt_keywords : tag1,tag2,한글태그 
publish : 0 
dateCreated : 2009-08-24T01:23:45+09:00