Soru & Cevap

Php Json Türkçe Karakter Sorunu

09.02.2015 - 03:15

Bir konuda yardımınıza ihtiyacım var. Php ile bir web servis yazdım. Mobilden kullanıcının girdiği verileri servise json olarak post ediyorum. Gönderdiğim veriler içerisinde türkçe karakter varsa veritabanına kayıt işlemi gerçekleşmiyor. Aşağıdaki gibi türkçe karakter ayarlamalarını yaptım. Fakat json verisinin çözerken bir problem oluşuyor galiba. Bu yüzden kayıt işlemi gerçekleşmiyor. Veritabanında karakter seti olarak "utf-8_unicode_ci" kullanıyorum. 
$_db->query("SET NAMES 'utf8'");
$_db->query("SET CHARACTER SET utf8");
$_db->query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");

Post olarak gelen json verisine ait işlemleri de aşağıdaki gibi yapıyorum. 
// add request if($_SERVER['REQUEST_METHOD']=='POST'){
$post = json_decode(file_get_contents("php://input"),true);
$result = addRequest($post['name'], $post['request'], $post['image'], $post['date'], $post['status']);
//addRequest(json_decode($post));
if(!$result) {
$data = 'Tekrar deniyiniz!';
header('HTTP/1.1 405 Reset Content');
} else {
$data = getRequest($result);
header('HTTP/1.1 201 Created');
}

} else { // get request
$data = getRequest();
header('HTTP/1.1 200 OK'); 
}

Bu konuda tavsiyelerinizi bekliyorum

671 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-71411-1558791714.jpg
emreaydemir
09.11.2018 - 03:55

2 yıl geçmiş ama..

mysqli_set_charset($conn,'utf8');

picture-31404-1421919825.png
muhcob
10.02.2015 - 10:08

Bir tane php sayfası oluşturup sunucuya veri ekleme işlemini web üzerinden yapmayı denediğimde hiçbir problem olmuyor. Veriler içerisinde türkçe karakter bulunsa bile ekleme işlemi gerçekleşiyor. Acaba mobil tarafta post işlemi gerçekleştirirken bir şeyi unutuyor muyum? Mobil tarafta yapmış olduğum post işlemi aşağıdaki gibidir.

        public static <T> String post(String url, T request, Class<T> classOfT) {
                String serviceResult = post(url, gson.toJson(request, classOfT));
                return serviceResult;
        }


    public static String post(String url, String json) {
        String result = null;
        // Making HTTP request
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-Type", "application/json; charset=utf-8");
            post.setEntity(new StringEntity(json));
            HttpResponse response = httpClient.execute(post);
            result = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
 

Muhammed ÇOBANOĞLU
10.02.2015 - 02:10
post.setEntity( new StringEntity(json, HTTP.UTF_8)); entity'i set ederken ikinci parametreye utf8 vererek problemi düzelttim.
picture-32113-1525245330.jpg
tugbaustundag
09.02.2015 - 04:06

İlk öncelikle $_db->query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");    karakter setini utf8_general_ci

yap ve  veritabanı tabloların utf8_general_ci olmalıdır. .Bu sekildede olmuyorsa kod cıktılarını echo yapıp adım adım yazıp, ilk tr karakter sorununu tam olarak hangi kodda olustgunuz sölersen birkaç alternatif cözüm daha üretmem daha kolay olcaktır.

picture-2176-1429627808.jpg
bekirdursun
09.02.2015 - 03:43

Aşağıdaki kodu üst taraflara ekleyip dener misin,

[code]header('content-type: application/json; charset=utf-8');[/code]

Muhammed ÇOBANOĞLU
09.02.2015 - 03:45
denedim maalesef olmadı.