Php ve json türkçe karakter hatası
Veritabanımda json verisi tutuyorum ama javascript ile ekliyorum türkçe karakter varsa onu sayıya çeviriyor bence bu javascript ile alakalı nasıl çözebilirim mesela ğ
harfi u011f
oluyor bunu nasıl çözücem.
Ve birde şu var veritabanından çekiyorum eğer yazı değiştirilirse diye ben yinede ayrı bir şekilde tekrar kaydediyorum. Normalinde bir sorun yok türkçe karakter olarak ama json eklersek javascript ile böyle oluyor.
Örnek: Kuğ
Çıktı: Kuu011f
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Varsayılan olarak json_encode()
fonksiyonu unicode karakterlere dönüştürüyor. Örneğin;
$arr = [
'name' => 'Çağla'
];
echo json_encode($arr); // çıktı: {"name":"u00c7au011fla"}
$json = '{"name":"u00c7au011fla"}';
$arr = json_decode($json, true);
print_r($arr);
/*
Array
(
[name] => Çağla
)
*/
Nihayetinde geri diziye çevirdiğinde karakterler orjinaline dönüyor ancak en başta bunu escape etmesin dersen 2. parametreye JSON_UNESCAPED_UNICODE
flagını belirtebilirsin;
$arr = [
'name' => 'Çağla'
];
echo json_encode($arr, JSON_UNESCAPED_UNICODE); // çıktı: {"name":"Çağla"}
json çağırdığın php dosyanın üstüne
header('Content-Type: text/html; charset=utf-8');
yada
Content-type: application/json; charset=utf-8
Tamam dostlar ben çözdüm :) Php'de fonksiyon yazdım olay çözüldü ama başka bi türlü çözülüyo olması lazım varsa söyler misiniz.
<?php
function correct($str) {
$str = str_replace("u0131", "ı", $str);
$str = str_replace("u00f6", "ö", $str);
$str = str_replace("u00e7", "ç", $str);
$str = str_replace("u0130", "İ", $str);
$str = str_replace("u015f", "ş", $str);
$str = str_replace("u011f", "ğ", $str);
return $str;
}
?>