Как использовать PHP json_encode без UTF8?

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

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

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

Единственное, что вам нужно сделать, это конвертировать ваши данные в 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)); 

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

Вы можете использовать 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"}