2012-01-06 2 views
1

모바일 앱 사용자가 휴대 전화에 댓글을 달거나 JSON을 사용하여 API에 게시물을 업로드하고 서버가 게시물을 입력하는 비동기 웹 서비스가 있습니다. 데이터베이스에 확인을 다시 전송합니다. 서버는 XML-RPC를 사용하여 메시지를 전달하지만 장치와의 모든 통신은 JSON에 의해 ​​수행됩니다.XML-RPC 및 MySQL로 중국어 문자 처리하기

이제 중국어 문자 지원을 추가하려고합니다. 내가 장치에서 게시물을 때, 이것은이 발송 될 때 JSON 텍스트가 모습입니다 : 코멘트 값이 中国 두 개의 한자를 나타냅니다

Request object: 

(
    { 
     comment = "\U4e2d\U56fd"; 
     "post_id" = 119791544; 
    } 
) 

있다. 이것이 데이터베이스에 입력되면 "??"로 표시됩니다. 16 진수 값을 보면 3F3F로 변환되므로 데이터베이스에 문자를 표시하는 데 문제가있는 것이 아니라 물음표가 저장되는 것입니다. .

function server_impl_post_comment($m) 
{ 
    global $xmlrpcerruser; 

    $auth = server_utils_authenticate_client(); 

    // return error if client is not authorised to use the api 
    if (!$auth['result']) 
    { 
     return new xmlrpcresp(0, $xmlrpcerruser, $auth['reason']); 
    } 

    logger_api_log_method_call('ff.post_comment', $auth['user_id']); 

    $args = $m->getParam(0); 

    $c['user_id'] = $auth['user_id']; 
    $c['post_id'] = $args->structmem("post_id")->scalarval(); 
    $c['comment'] = $args->structmem("comment")->scalarval(); 

    // @todo: chinese characters come through as ? here 

    // submit the comment 
    $comment = post_comment($c); 
    $post = post_get_post($c['post_id']); 

    $result = server_utils_format_result_struct(TRUE, POST_COMMENT_TITLE, POST_COMMENT_MSG, POST_COMMENT_BUTTON, POST_COMMENT_SHOW, $c['post_id'], $comment); 
    $result['post_info'] = server_utils_format_post_info($post); 
    $result['post_up_votes'] = $post['post_vote_up_count']; 
    $result['post_down_votes'] = $post['post_vote_down_count']; 
    $result['post_comments'] = $post['post_comment_count']; 

    return new xmlrpcresp(php_xmlrpc_encode($result)); 
} 

: 또한이 서버가 두 개의 문자를 통해 오는 것을 이해하는 것을 의미한다, 그래서오고 있는지의 문자 크기를 인식하고이 서버가 장치에서 데이터를 수신 할 때 호출되는 기능입니다 @todo 주석 줄에서 로깅 메서드를 추가하고 $ c [ 'comment']가 "??" 다시. 나는 처음에 $ m의 값을 기록하려고 시도했지만 어떤 이유로 작동하지 않았다. 서버에서 사용되는 XML-RPC 라이브러리는 Edd Dumbill의 xmlrpc.inc v1.169이며, 아는 한 UTF-8을 지원합니다. 이것이 어디서 잘못 될지에 대한 아이디어가 있습니까? 한자를 SQL로 데이터베이스에 곧바로 삽입 할 수 있었으므로 방해가되지 않아야합니다.

답변

0

MySQL 연결과 테이블 필드 데이터 정렬 모두 중국어 문자를 지원해야합니다. UTF 유니 코드 연결은 좋은 방법입니다.

는 예를 들어, 당신은 MySQL의 물건을 모두 post_comment 기능에 있지만, 팁을위한 mysql_connect();

+0

감사를 호출, 그래서 영향을 미치지 않을 것이다 직후 UTF8에 대한 연결을 설정하는 mysql_set_charset("utf8", $link)로 전화를 걸 $ c [ 'comment']의 값 - 그 전에 오류가 있어야합니다. – benwad

+0

XML-RPC에 대한 POST 통신용 문자 세트가 올바르게 설정 되었습니까? 내가 옳다면 데이터베이스에 게시되는 콘텐츠가 이미 깨져 버린 것입니다. @todo를 넣은 위치에서 바로 콘텐츠를 기록하여 콘텐츠가 스크립트에 올바르게 전달되었는지 확인할 수 있습니다. 기록 된 내용이 올 바르면 데이터베이스 연결에 문제가있는 것입니다. –

+0

@todo가 있고 두 개의 물음표가 기록 된 로그 기능을 넣었으므로 그 전에 무엇인가가 일어나야합니다. 그것은 실제 PHP 파일의 인코딩과 관련이 있을까요? – benwad

관련 문제