2016-02-20 2 views
0

Я работаю над старым существующим сайтом. Все страницы были закодированы в ISO-European, включая базу данных MySQL.Как использовать PHP json_encode без UTF8?

Я хочу добавить AJAX, используя PHP json_encode, который поддерживает только UTF8.

Есть ли решение использовать json_encode без UTF8?

+0

http://stackoverflow.com/questions/6606713/json-encode-non-utf-8-strings, помогает ли это? – codisfy

+0

просто для очистки точки: JSON требует/указывается только для стандарта Unicode (где utf-8 - это конкретная кодировка, которая подходит). Поэтому утверждение 'use json_encode без UTF8' не имеет никакого смысла. – birdspider

ответ

1

Единственное, что вам нужно сделать, это преобразовать данные в UTF-8 перед передачей до json_encode. Эта функция требует UTF-8 данные, и если вы не хотите переопределять json_encode себе это намного легче идти вместе со своими требованиями:

function recursivelyConvertToUTF8($data, $from = 'ISO-8859-1') { 
    if (!is_array($data)) { 
     return iconv($from, 'UTF-8', $data); 
    } 
    return array_map(function ($value) use ($from) { 
     return recursivelyConvertToUTF8($value, $from); 
    }, $data); 
} 

echo json_encode(recursivelyConvertToUTF8($myData)); 

Это не обязательно полное решение охватывает все возможные варианта использования, но она должна иллюстрируют эту идею.

0

Вы можете использовать var_export, utf8_encode и eval для преобразования массива в UTF-8 рекурсивно. Это немного рубить, но что-то вроде следующих работ:

$obj = array("key" => "\xC4rger"); // "Ärger" in Latin1 
eval('$utf8_obj = ' . utf8_encode(var_export($obj, TRUE)) . ';'); 
print json_encode($utf8_obj); 

Это напечатает

{"key":"\u00c4rger"} 
+0

Должен быть здравый способ сделать это, кроме 'eval' ...! – deceze

Смежные вопросы