2012-04-29 5 views
0

나는 PHP 스크립트를 사용하여 mysql에서 operacinės sitemos 문자열을 얻습니다. 하지만이 값을 PHP 스크립트에 다시 보내고 다른 값을 얻으려고하면 null이 발생합니다. 문제는 영어가 아닌 문자를 가져 오는 PHP 스크립트와 관련이 있다고 생각합니다. 내가 놓친 게 있니?자바 프로그램에서 PHP 스크립트로 요약 값을 가져 오는 방법은 무엇입니까?

자바 코드 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.single_course_layout); 

Intent in = getIntent(); 
courseName = in.getStringExtra("fullname"); 
firstname = in.getStringExtra("firstname"); 
lastname = in.getStringExtra("lastname"); 

TextView label = (TextView)findViewById(R.id.label); 
label.setText(courseName); 
String summary = null; 
TextView summaryContent = (TextView)findViewById(R.id.summary); 


ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("cname",""+courseName)); 
InputStream is = null; 
String result = null; 
try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("********"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 
}catch(Exception e){ 
     Log.e("log_tag", "Error in http connection "+e.toString()); 
} 
try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"ISO-8859-10"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
       System.out.println(line); 
     } 
     is.close(); 

     result=sb.toString(); 
}catch(Exception e){ 
     Log.e("log_tag", "Error converting result "+e.toString()); 
} 

try{ 
JSONArray jArray = new JSONArray(result); 
for(int ii=0;ii<jArray.length();ii++){ 
     JSONObject json_data = jArray.getJSONObject(ii); 
     summary = json_data.getString("summary"); 
} 
summaryContent.setText(summary); 
} catch(JSONException e){ 
Log.e("log_tag", "Error parsing data "+e.toString()); 
} 

}; 

PHP 스크립트 :

<?php 
    mysql_connect("localhost","***","*****"); 
    mysql_select_db("*******"); 
    mysql_query("SET NAMES utf8"); 
    $fullname = mysql_real_escape_string($_REQUEST['cname']); 

    $q=mysql_query("SELECT mdl_course.summary FROM mdl_course WHERE mdl_course.fullname = '$fullname'"); 
    while($e=mysql_fetch_assoc($q)) 
      $output[]=$e; 

    print(json_encode($output)); 

    mysql_close(); 
    ?> 

Eddited

이 PHP 코드는 잘 작동합니다. 필요한 출력을 볼 수 있습니다. 그러나 왜 위의 스크립트가 작동하지 않습니까?

<?php 
mysql_connect("localhost","*******","*********"); 
mysql_select_db("************"); 
$fullname = 'Operacinės sistemos'; 
$q=mysql_query("SELECT mdl_course.summary FROM mdl_course WHERE mdl_course.fullname = '$fullname'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 
mysql_close(); 
?> 
+1

아마도 mysql_set_charset ("utf8");은 mysql_query ("SET NAMES utf8"); –

답변

0

어떻게 PHP 스크립트에 UTF-8_lithuanian_ci를 보내?

매우 간단합니다. utf-8_lithuanian_ci은 데이터 정렬이므로 데이터 정렬 순서가있는 데이터가 이미있는 동안에는 이미 완료되었습니다. 데이터를 전달하기 만하면됩니다. 데이터 정렬은 정렬 할 때만 적용될 수 있으므로 데이터를 전달할 때 데이터가 이미 정렬되어 있으므로 수행 할 작업이 없습니다.

인코딩에 대해 질문하는 경우 엄격하게 말할 수 없습니다. UTF-8 인코딩은 UTF-8 기반의 UTF-8 인코딩을 사용하는 것이 일반적이지만 기술적으로는 다른 문자 인코딩도 사용할 수 있으며 어느 것을 지정하지 않았으므로 부정확합니다.

또한 SET NAMES utf8의 PHP 내 사용은 권장되지 않습니다. 전체 mysql 확장의 사용은 권장하지 않습니다.

+0

보다 좋을까요? BufferedReader reader = 새 BufferedReader (새 InputStreamReader (is, "iso-8859-10"), 8); – LTnewbie

+0

ISO -...를 UTF-8로 대체하십시오. 그냥 빨리 추측 해이 문제가 해결되는지 빨리 테스트하십시오. 그렇지 않으면 디버깅을 더 정확하게 수행해야합니다 (어, 실제 디버깅을 수행하고 추측하지 말고 추측은 2 분의 문제를 해결하는 것이 좋습니다. 그러나 시간이 오래 걸리는 경우, 추측을 멈추라.) – hakre

+0

아니, 도움이되지 않았다. 나는 여전히 요약 값을 얻을 수 없다. – LTnewbie

관련 문제