모바일 앱 사용자가 휴대 전화에 댓글을 달거나 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로 데이터베이스에 곧바로 삽입 할 수 있었으므로 방해가되지 않아야합니다.
감사를 호출, 그래서 영향을 미치지 않을 것이다 직후 UTF8에 대한 연결을 설정하는
mysql_set_charset("utf8", $link)
로 전화를 걸 $ c [ 'comment']의 값 - 그 전에 오류가 있어야합니다. – benwadXML-RPC에 대한 POST 통신용 문자 세트가 올바르게 설정 되었습니까? 내가 옳다면 데이터베이스에 게시되는 콘텐츠가 이미 깨져 버린 것입니다. @todo를 넣은 위치에서 바로 콘텐츠를 기록하여 콘텐츠가 스크립트에 올바르게 전달되었는지 확인할 수 있습니다. 기록 된 내용이 올 바르면 데이터베이스 연결에 문제가있는 것입니다. –
@todo가 있고 두 개의 물음표가 기록 된 로그 기능을 넣었으므로 그 전에 무엇인가가 일어나야합니다. 그것은 실제 PHP 파일의 인코딩과 관련이 있을까요? – benwad