Я работаю над старым существующим сайтом. Все страницы были закодированы в 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"}