2012-10-08 6 views
3

나는 전에 여러 번 물어 본 질문을 알고 있지만 내 문제에 대해 명확히해야한다고 생각합니다.PHP로 안드로이드 : MySQL에 utf-8 문자열 저장하기

JSON 인코딩 문자열을 PHP 스크립트로 보내는 Android 앱이 있습니다. 다음 코드는 데이터를 완전한 JSON 문자열로 저장합니다. 문제는 텍스트의 일부는 JSON 문자열에 포함 된 안드로이드 strings.xml의에서 가져온 것입니다

$json_complete = $_POST['questionnaire']; 
$q = json_decode($json_complete, true); 

//save complete json string to database 
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '$json_complete') ON DUPLICATE KEY UPDATE json = VALUES(json)"; 
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error()); 
if (!$result) 
    errorReport($result); 

(제대로 여러 분야뿐 아니라 하나 개 JSON 문자열에 데이터를 저장하는 다른 기능도 있습니다) 그것은 utf-8로 인코딩됩니다. strings.xml 파일의 예로서 <item>Can\'t get there</item>은 MySQL에 "Canu0027t get there"라는 이름으로 저장됩니다. 또한 "Wholesale & Retail"은 "Wholesale u0026 Retail"으로 저장됩니다.

또한 PHP에서 json_decode()이 JSON 문자열에 utf-8로 인코딩되지 않은 문자로 인해 실패합니다. 다음 오류가 발생했습니다. 잘못 인코딩 된 UTF-8 문자가 잘못되었습니다.

이 모든 시나리오를 어떻게 처리 할 수 ​​있습니까? 제발 도와주세요.

+0

왜 json_decode()가 PHP에서 실패합니까? 잘못된 문자열이 표시되거나 오류 메시지가 나타 납니까? –

+0

Canu0027t를 저장하더라도 거기에 도착하면 var a = "Canu0027t get there"와 같이 표시됩니다. 경고 (a); 당신은 볼 것이다 : Canu't는 거기에 도착한다 –

답변

2

귀하의 검색어에 mysql_real_escape_string()$json_complete도 입력해야합니다. 그렇지 않으면 원래 /uXXXX 인코딩을 잃게됩니다.

$json_complete = $_POST['questionnaire']; 
$q = json_decode($json_complete, true); 

//save complete json string to database 
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '".mysql_real_escape_string($json_complete)."') ON DUPLICATE KEY UPDATE json = VALUES(json)"; 
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error()); 
if (!$result) 
    errorReport($result); 
1

게시물의 인코딩을 설정 했습니까?

List<NameValuePair> params = ...; 
    HttpPost httppost = new HttpPost(hostname); 
    httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); 
+0

나는 그것을 시험해 보았다. 그러나 그것은 어떤 차이도 만들지 않았다. 여전히 "itu0027s"로 저장됩니다. – Rynardt

+0

내 하루를 저장했습니다 :) thanks @brubodea +1 – user3225831

0

일반적으로 모든 문자열은 쉬운 국제화가 가능하므로 현재는 UTF-8이어야합니다. 문자열 필드가 UTF-8 (utf8_general_ci)으로 저장되고 변환에 문제가 없도록 MySQL 데이터베이스를 설정해야합니다.

db의 다른 인코딩을 고집하는 경우 mb_check_encoding($string,'UTF-8')mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8')을 확인하시기 바랍니다.

+0

내 MySQL을 utf8_general_ci로 변경했지만 아무런 차이가 없습니다. 또한 mb_check_encoding 및 mb_convert_encoding을 시도했지만 차이점도 없습니다. 여전히 "it 's"가 "itu0027s"로 저장됩니다. – Rynardt

+0

그것은 이상합니다. php가 utf-8 json을 올바르게 디코딩 할 수 없기 때문에 디코딩 된 json에는 추가 문자가 들어 있습니다. 또는 어쩌면 그 문자열이 xml에서 읽히고 json에 삽입되는 방식을 변경해야합니다. –