ISO-8859-9 dönüştürme php

2 Cevap php

Ben bir dizi kodlamak için JSON, ve ben böyle bir dize olsun:

{"name":"\u00fe\u00fd\u00f0\u00f6\u00e7"}

Şimdi ISO-8859-9 bu dönüştürmek gerekir. Ben şu çalıştı ama başarısız olur:

header('Content-type: application/json; charset=ISO-8859-9');
$json = json_encode($response);
$json = utf8_decode($json);
$json = mb_convert_encoding($json, "ISO-8859-9", "auto");
echo $json;

Çalışmak için görünmüyor. Ne eksik?

Zaman ayırdığınız için teşekkür ederiz.

2 Cevap

Sen yapabilirsin:

$json = json_encode($response);
header('Content-type: application/json; charset=ISO-8859-9');
echo mb_convert_encoding($json, "ISO-8859-9", "UTF-8");

In dizeleri $response utf-8 olduğunu varsayarsak. Ama ben kesinlikle sadece tüm yol boyunca UTF-8 kullanmanızı öneririm.

Düzenleme: Üzgünüm, sadece json_encode javascript kaçış kodları olarak unicode puan kaçar beri, işe yaramaz olduğunu fark etti. Önce utf-8 dizileri bu dönüştürmek gerekir. Bunun için herhangi bir yerleşik işlevselliği vardır sanmıyorum, ama oraya this library biraz değiştirilmiş bir biçimini kullanabilirsiniz. Aşağıdaki deneyin:

function unicode_hex_to_utf8($hexcode) {
  $arr = array(hexdec(substr($hexcode[1], 0, 2)), hexdec(substr($hexcode[1], 2, 2)));
  $dest = '';
  foreach ($arr as $src) {
    if ($src < 0) {
      return false;
    } elseif ( $src <= 0x007f) {
      $dest .= chr($src);
    } elseif ($src <= 0x07ff) {
      $dest .= chr(0xc0 | ($src >> 6));
      $dest .= chr(0x80 | ($src & 0x003f));
    } elseif ($src == 0xFEFF) {
      // nop -- zap the BOM
    } elseif ($src >= 0xD800 && $src <= 0xDFFF) {
      // found a surrogate
      return false;
    } elseif ($src <= 0xffff) {
      $dest .= chr(0xe0 | ($src >> 12));
      $dest .= chr(0x80 | (($src >> 6) & 0x003f));
      $dest .= chr(0x80 | ($src & 0x003f));
    } elseif ($src <= 0x10ffff) {
      $dest .= chr(0xf0 | ($src >> 18));
      $dest .= chr(0x80 | (($src >> 12) & 0x3f));
      $dest .= chr(0x80 | (($src >> 6) & 0x3f));
      $dest .= chr(0x80 | ($src & 0x3f));
    } else {
      // out of range
      return false;
    }
  }
  return $dest;
}

print mb_convert_encoding(
  preg_replace_callback(
    "~\\\\u([1234567890abcdef]{4})~", 'unicode_hex_to_utf8',
    json_encode($response)),
  "ISO-8859-9", "UTF-8");

Eğer PHP documentation site JSON kodlama / kod çözme fonksiyonları üzerinde görebileceğiniz gibi sadece bu yüzden size bazı veri sorunlara neden olabilir değiştirmeye çalışıyorlar, utf8 kodlama ile çalışmak, beklenmeyen ve yanlış sonuçlar alabilirsiniz.