Turkcell | Geleceği Yazanlar

Soru & Cevap

Php Json Türkçe Karakter Sorunu

09.02.2015 - 15: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

8204 Görüntülenme

4 Cevap

Emre Aydemir
09.11.2018 - 15:55

2 yıl geçmiş ama..

mysqli_set_charset($conn,'utf8');

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Muhammed ÇOBANOĞLU
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;
    }
 

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Muhammed ÇOBANOĞLU
10.02.2015 - 14:10
post.setEntity( new StringEntity(json, HTTP.UTF_8)); entity'i set ederken ikinci parametreye utf8 vererek problemi düzelttim.
Tuğba Üstündağ
09.02.2015 - 16: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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Bekir Dursun
09.02.2015 - 15:43

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

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

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

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

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