<?php
//Veritabanından kayıt alma
$query=mysql_query("SELECT * From user);
while($row=mysql_fetch_assoc($query))
$kayitlar[]=$row;
//Fonksiyonu çağır ve ekrana sonucu yaz
echo json_turkce($kayitlar);
//Türkçe JSON Fonksiyonu
function json_turkce($dizi){
foreach($dizi as $record){
foreach($record as $key=>$og){
$colm[]='"'.$key.'":"'.$og.'"';
}
$rec[]="{".implode(",",$colm)."}";
unset($colm);
}
$sonuc='['.implode(",",$rec).']';
return $sonuc;
}
?>Yukarıda, veritabanından aldığımız kayıtları JSON formatına çevirdik. Bu çözüm, iki boyutlu yani tablo şeklindeki diziler içindir. Tek boyutlu diziler için (pek fazla gerek olmaz) ise bir kez foreach kullanmanız yeterlidir. Bu fonksiyonu, verilerinizi UTF-8 karakter setinde kaydetmiyorsanız, Türkçe karakter problemi yaşamamak için rahatlıkla kullanabilirsiniz. Benim işime yaradı, umarım sizlere de fayda sağlar.
JSON Türkçe Karakter Çözümü
6
●6.384
- 05-08-2012, 18:36:59Merhaba arkadaşlar, bu yazımda ne kadar araştırmama rağmen bulamayıp kendi çözümümü ürettiğim, json_encode Türkçe karakter probleminin çözümünü anlatacağım. Sorun, JSON (JavaScript Object Notation) formatının sadece UTF-8 karakter setine izin vermesinden kaynaklanıyor. Çoğu yerde, iconv kullanarak Türkçe karakter probleminin çözüldüğünü anlatmalarına rağmen bende maalesef işe yaramadı. Bundan dolayı da kendime json_encode eden fonksiyon yazdım. Veri iletim formatı olarak çok fazla kullanıldığı için kendi yaptığım bu çözümü sizlerle paylaşmak istedim.
- 26-09-2012, 15:41:22Kimlik doğrulama veya yönetimden onay bekliyor.json_encode() ile json_decode() işinizi zaten görecektir.
kodlama yaptığınız pencereyi sayfa boşken,
utf-8 bomsuz kodla olarak ayarlayıp, ondan sonra kodlarınızı yapıştırın.
notepad++ kullanıyorsanız, en üstteki menüden Kodlama'yı tıklayıp,
açılan menüden seçebilisiniz.
sorun kalmayacaktır. eğer verileriniz utf-8 değilse, iconv() ile utf-8 dönüştürmesi de yapabilirsiniz.
yeniden fonksiyon yazmak çok gereksiz. - 13-10-2015, 06:45:31API ile veritabanınından JSONP yayınlatmaya çalışıyorum fakat veritabanındaki tabloda Türkçe karakter varsa API JSONP yayınlamıyor. Türkçe karakterleri kaldırdığımda JSONP normal olarak geliyor. Yani anlamadım tam ş,ç,İ gibi karakterler UTF-8 değil mi? Neden sorun oluyor böyle?
API headers ekledim, pdo charset uft8mb4 yaptım birşey değişmedi.
header('Content-Type: application/json; charset=utf-8');mysql:charset=utf8mb4
Edit-1: json_encode'dan önce veritabanından gelen veriye var_dump ile baktığımda yine Türkçe karakterler soru işareti olarak çıkıyor.
Edit-2:Sorun MYSQL charsetinde imiş. UTF-8 gözüksede deilmiş. My.cnf dosyasına aşağıdakileri ekleyerek çözdüm.
[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
- 13-10-2015, 11:55:14'Sunucu linux olur ama yazılım windows ta geliştirilir'
Hah işte sorun Türkçe karakterde değil, bu lafı söyleyen ile bu lafı bilmeden dinleyende
PHP de Türkçe karakterler ile ilgili sorun vardır, ama bunlarda değil
Windowsta yazılım geliştiriyorsaniz karakter kodlamasına dikkat etmeniz gerekir. Tutup Windows-1254 kullanmamanız gerekir. Iso-8859-*, latin1-9, Windows-125* serilerinin ilk 128 karakteri UTF8 uyumludur, Türkçe karakterler de 2. 128'lik blokta yer alır, bu nedenle Türkçe karakter yokken sorun yasamazsınız ama Türkçe karakter girince patlarsınız. Yani aslında başından beri sizin yaptığınız iş hatalı, json_encode hatalı değil
