Специальные символы в объекте заставляют json_encode выдавать ошибку - PullRequest
0 голосов
/ 14 февраля 2012

Приветствую всех хранителей знаний, и пусть этот глупый вопрос дойдет до вас с хорошим здоровьем,

Я решил изучать PHP, и как часть этого славного предприятия я пытаюсь создатьRESTful API для БД MySql.Я использую Slim поверх PHP 5.3.Все идет нормально.Но я также живу в Дании, что является проблемой (очевидно), потому что нам нравится использовать символы типа «æ», «ø» и «å».

Итак, когда я спрашиваю мою фантастическую хитрость RESTful дляобъект без странных символов, вежливо отвечает:

{
id: "3",
name: "Wall - Plaster",
price: "200",
unit: "m2",
tags: "1"
}

Но, увы.Дела идут не так хорошо, когда просят вернуть объект с символом 'æ' или любым другим странным символом:

FOOL! json_encode(): Invalid UTF-8 sequence in argument

utf8_encode () и Iconv.conv () работает для строк и массивов.Но что я могу использовать для объекта?Есть ли способ, которым я мог бы пройти через объект, как foreach?

Моя БД и таблица находятся в UTF8.

Моя ксенофобная функция:

function getItem($id) {
        $sql = "SELECT * FROM items WHERE id=:id";
        try {
                $db = getConnection();
                $stmt = $db->prepare($sql);
                $stmt->bindParam("id", $id);
                $stmt->execute();
                $item = $stmt->fetchObject();
                $db = null;
                echo json_encode($item);
                //echo $item;
                //print_r($item);
            } catch(PDOException $e) {
                echo '{"error":{"text":'. $e->getMessage() .'}}';
            }
    }    

Спасибо, и пусть к вам стекаются девственницы с дарами ферментированного ячменя.

1 Ответ

2 голосов
/ 14 февраля 2012

Ваше соединение с базой данных, вероятно, ISO-8859-1 - это кодировка по умолчанию для соединений MySQL.Следовательно, вы получаете символьные данные ISO-8859-1, даже если база данных - UTF-8.

См. этот вопрос для различных (постоянных и для каждого соединения) способов изменения соединения PDO.набор символов.

...