Quest
Я хочу получить строки с акцентированными символами. Кодировка для столбца (NAME
) составляет latin1_swedish_ci
.
Код
Следующий запрос возвращает Abord â Plouffe
с помощью phpMyAdmin:
SELECT C.NAME FROM CITY C
WHERE C.REGION_ID=10 AND C.NAME_LOWERCASE LIKE '%abor%'
ORDER BY C.NAME LIMIT 30
Ниже отображаются ожидаемые значения (функция называется db_fetch_all( $result )
):
while( $row = mysql_fetch_assoc( $result ) ) {
foreach( $row as $value ) {
echo $value . " ";
$value = utf8_encode( $value );
echo $value . " ";
}
$r[] = $row;
}
Отображаемые значения: 5482 5482 Abord â Plouffe Abord â Plouffe
Затем массив кодируется с помощью json_encode
:
$rows = db_fetch_all( $result );
echo json_encode( $rows );
Проблема
Веб-браузер получает следующее значение:
{"ID":"5482","NAME":null}
Вместо:
{"ID":"5482","NAME":"Abord â Plouffe"}
(Или закодированный эквивалент.)
Вопрос
В документации указано, что json_encode()
работает в UTF-8. Я могу видеть, что значения кодируются от LATIN1 до UTF-8. Однако после вызова json_encode()
значение становится null
.
Как мне сделать json_encode()
правильно закодировать значения UTF-8?
Одним из возможных решений является использование Zend Framework, но я бы предпочел, чтобы этого избежать.