Murat Çeşmecioğlu

Kişisel Web Sitesi

Yazdığım ufak bir projede cURL ile çektiğim JSON verisini bir türlü PHP’de json_decode fonksiyonu ile kullanamıyordum. Nedenini araştırıp buldum. Hem kodları kaybetmeyeyim, hemde benzer problem ile karşılaşanlara yardımcı olayım dedim.

UTF-8 ile hayatımıza girmiş olan BOM (Byte Order Mark), dosyanın UTF-8 formatında olduğunu belirtmek için eklenen bir başlıktır. Dosyanın başına eklenen unicode U+FEFF karakteridir. Hex olarak 0xEF,0xBB,0xBF; ascii olarak  karakterlerine karşılık gelir. Bu karakterlerin dosyanın başında bulunması bazı zamanlarda sorunlara yol açar. Örneğin benim durumumda JSON verisi olarak çektiğimi sandığım veride aslında ilk başındaki BOM yüzünden JSON olarak kullanamadım. Görülebilen bir karakter olmadığı için de hemen fark edilmiyor.

Benzer bir durumla karşılaştığınızda aşağıdaki kodla gelen veriyi bin2hex fonksiyonu ile 16lık sisteme dönüştürerek efbbbf karakterlerinin olup olmadığına bakıyoruz. Eğer varsa bunları siliyoruz.

if (0 === strpos(bin2hex($data), 'efbbbf')) {
$data = substr($data, 3);
}