2016-02-02 4 views
1

У меня есть пользователей таблица с Collation as utf8_general_ci. Наличие полей, таких как имя, возраст, телефон и электронная почта.PHP json_encode не работает

Кажется, что некоторые из строк поля имени имеют некоторые конечные пробелы. Если echo-ed echo "selectedUser " . $selectedUser->name; Он печатает это имя с пробелами, и я просто скопировал имя из поля БД и вставить его на файл PHP, и эхо-эд, что текст, он печатал как

selectedUser «Rohan Хариш Reddy \ u00a0 \ u00a0 "

имя поля содержит только конечные белые-пространства на поле, я не уверен,

почему он печатается, как это? Почему он не работает для json_encode? Как я могу преобразовать этот пользователь объект с json_encode?

Код:

$users = $stmt->fetchAll(PDO::FETCH_OBJ); 

foreach ($users as $user) { 

    $selectedUser = $user; 

    echo "selectedUser " . json_encode($selectedUser); 

} 

Если добавить ниже код выше принести все заявления, оно работает нормально.

$this-> adminConn ->query("SET NAMES utf8"); 
$stmt = $this-> adminConn ->query($sql); 

Мне нужно установить "SET NAMES utf8" для каждого запроса делать? Есть ли общий способ для его достижения?

ответ

1

Поскольку у вас нет пробелов (Unicode 0x0020), у вас есть неразрывные пробелы (Unicode 0x00A0). Стандарт JSON (RFC 7159) объявляет, что все символы Unicode могут быть экранированы, и json_encode использует это, чтобы избежать неразрывных пробелов (чтобы отличить их от читателя от обычных пространств, я бы предположил). Возможно, решение состоит в том, чтобы выяснить, почему у вас есть конечные пробелы в ваших данных.

+0

Когда мы загружаем файлы csv, это происходит. Вставляется Unicode 0x00A0. Любой способ избежать этого при анализе загруженного файла и избежать его на json_encode ?? – Muthu

+0

Я не знаю, как выглядит ваш CSV, или как вы его разбираете, или как вы санируете (или не) свои ценности. Избежать его на 'json_encode' просто, просто замените все nbsps на обычные пробелы или удалите их прямо, используя' preg_replace', перед 'json_encode'. – Amadan

+0

Если имя имеет какие-либо неразрывные пробелы, этот конкретный объект не печатается с помощью json_encode ($ selectedUser) из-за этих неразрывных пробелов. – Muthu

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