Код JSON и фигурные кавычки - PullRequest
3 голосов
/ 23 сентября 2011

Я столкнулся с интересным поведением в нативной реализации PHP 5 json_encode(). Очевидно, что при сериализации объекта в строку json кодировщик обнуляет любые свойства, являющиеся строками, содержащими «фигурные» кавычки, которые могут быть скопированы из документов MS Word с включенным автоматическим преобразованием.

Это ожидаемое поведение функции? Что я могу сделать, чтобы заставить эти виды символов перейти к их основным эквивалентам? Я проверил несоответствия кодировки символов между базой данных, возвращающей данные, и страницей администрирования, которая вставляет их, и все настроено правильно - определенно кажется, что кодировщик просто отклоняет эти значения из-за этих символов. Кто-нибудь еще сталкивался с таким поведением?

EDIT:

уточнить;

MSWord возьмет стандартные кавычки и апострафы и преобразует их в более эстетичные «причудливые» или «фигурные» цитаты. Эти символы могут вызывать проблемы при размещении в менеджерах контента, у которых есть несоответствия кодировки между их интерфейсом редактирования (в html) и кодировкой базы данных.

Хотя проблема не в этом. Например, у меня есть json_object, представляющий профиль человека и строку:

Jim O’Shea

Код UTF для этого апострафа \u2019

Будет иметь значение null в объекте json при получении из базы данных и непосредственном json_encoded.

{"model_name":"Bio","logged":true,"BioID":"17","Name":null,"Body":"Profile stuff!","Image":"","Timestamp":"2011-09-23 11:15:24","CategoryID":"1"}

Ответы [ 3 ]

5 голосов
/ 23 сентября 2011

Никогда не было этой конкретной проблемы (т. Е. С json_encode()), но простое, хотя и немного уродливое, решение, которое я использовал в других местах, состоит в том, чтобы перебрать ваши данные и передать их через эту функцию, которую я откуда-то получил (поверимэто когда я узнаю где я его взял):

function convert_fancy_quotes ($str) {
  return str_replace(array(chr(145),chr(146),chr(147),chr(148),chr(151)),array("'","'",'"','"','-'),$str);
}
2 голосов
/ 23 сентября 2011

json_encode имеет неприятную привычку молча отбрасывать строки, в которых он находит недопустимые (т. Е. Не UTF8) символы. (См. Здесь для справки: Как сохранить json_encode () от сброса строк с недопустимыми символами )

Я предполагаю, что фигурные кавычки находятся в неправильном наборе символов или конвертируются по пути.Например, это может быть связано с тем, что соединение с вашей базой данных имеет кодировку ISO-8859-1.

Можете ли вы уточнить, откуда поступают данные в каком формате?

1 голос
/ 23 сентября 2011

Если мне когда-нибудь понадобится это сделать, я сначала скопирую текст в Блокнот, а затем скопирую его оттуда. Блокнот заставляет это быть нормальными кавычками. Хотя никогда не приходилось делать это с помощью кода ...

...