Zend_Json :: кодировать проблемы с двойными кавычками - PullRequest
1 голос
/ 15 февраля 2012

У меня есть Zend Form, которая позволяет вам добавить класс колледжа в базу данных.Я собираю данные и сохраняю их с помощью Doctrine 2. Все хорошо, данные приведены в таблице.Когда я получаю данные, все готово к использованию.

array
   0 => &
array
  'id' => int 151
  'className' => string 'Geocaching (Jee-oh-Cash-ing) is part of a worldwide outdoor  game for GPS users. Go on an adventure to find hidden treasure, called “geocaches”. If you own a GPS receiver or a smartphone, bring it (preferred, but not required) along with some fresh batteri' (length=255)
  'instructor' => string 'Geocaching (Jee-oh-Cash-ing) is part of a worldwide outdoor game for GPS users. Go on an adventure to find hidden treasure, called “geocaches”. If you own a GPS receiver or a smartphone, bring it (preferred, but not required) along with some fresh batteri' (length=255)
  'classDescription' => string 'Geocaching (Jee-oh-Cash-ing) is part of a worldwide outdoor game for GPS users. Go on an adventure to find hidden treasure, called “geocaches”. If you own a GPS receiver or a smartphone, bring it (preferred, but not required) along with some fresh batteri' (length=255)

Затем я использую Jquery DataTables для отображения всех данных таблицы.У меня есть помощник вида, который делает JQuery для данных.Внутри помощника вида я использую

Zend_Json::encode(array_merge($this->_defaultOptions, $options), false,   array('enableJsonExprFinder' => true)); 

Все значения, которые имеют двойные кавычки, кодируются как нуль.

"aaData":{"id":151,"className":null,"instructor":null,"classDescription":null,}}'

Любые другие значения будут отображаться в DataTable, кроме любого значения, которое имеет двойные кавычки.

Я должен делать что-то действительно неправильно, потому что у меня также есть эта проблема, когда я пытаюсь повторно-пополнить форму Zend данными для обновления.

$results = $this->_doctrine->getEntityManager()->getRepository('My\Entity')->findOneBy($request->getParam('id'));
$form->setDefaults($results[0]);

Опять же, если я дам результаты из Doctrine, все цитируемые данные готовы для использования.Но после $ form-> setDefaults ($ results [0]) поля в форме остаются пустыми.

Любая помощь действительно приветствуется.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2013

У меня была такая же проблема. Решение состоит в том, что кавычки были не "а скорее" (кавычки, закодированные Microsoft), из-за которых json_encode() возвращал значение null. Выполнение замены методом из этого ответа ( Как заменить кавычки в Microsoft в PHP ) исправил это.

UPDATE:

Zend также имеет кодировщик, который анализирует строку для вас. Но вам нужно установить Zend_Json::$userBuiltinEncoderDecoder = true в вашем загрузчике, и он будет использовать его вместо php's json_encode

0 голосов
/ 15 февраля 2012

Я думаю, что вам нужно использовать константу JSON_HEX_QUOT

, это работает:

$options = array(JSON_HEX_QUOT);
$json = Zend_JSON($value, $cyclecheck, $options);

Я углубился в код Zend / Json.php и похоже, чтовы хотите использовать JSON_HEX_QUOT, вам нужно будет использовать функцию PHP, поскольку Zend_Json не передает константу.

    // Encoding
    if (function_exists('json_encode') && self::$useBuiltinEncoderDecoder !== true) {
        $encodedResult = json_encode($valueToEncode);

Я думаю, это потому, что ZF закодирован в PHP 5.2.6.стандарт и $ options были добавлены в json_encode в PHP 5.3.0

, вот ссылка из руководства по php:

Пример # 2 * Json_encode () пример, показывающий все опции в действии *

<?php $a = array('<foo>',"'bar'",'"baz"','&blong&');

echo "Normal:", json_encode ($ a), "\ n";echo "Tags:",
json_encode ($ a, JSON_HEX_TAG), "\ n";echo "Apos:",
json_encode ($ a, JSON_HEX_APOS), "\ n";echo "Quot:",
json_encode ($ a, JSON_HEX_QUOT), "\ n";echo "Amp:",
json_encode ($ a, JSON_HEX_AMP), "\ n";echo "All:",
json_encode ($ a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP), "\ n \ n";

$ b = array ();

echo"Вывод пустого массива в виде массива:", json_encode ($ b), "\ n";echo "Вывод пустого массива как объекта:", json_encode ($ b, JSON_FORCE_OBJECT), "\ n \ n";

$ c = array (array (1,2,3));

echo "Неассоциативный вывод массива в виде массива:", json_encode ($ c), "\ n";echo "Неассоциативный вывод массива как объекта:", json_encode ($ c, JSON_FORCE_OBJECT), "\ n \ n";

$ d = массив ('foo' => 'bar', 'baz'=> 'long');

echo "Ассоциативный массив всегда выводится как объект:", json_encode ($ d), "\ n";echo "Ассоциативный массив всегда выводится как объект:", json_encode ($ d, JSON_FORCE_OBJECT), "\ n \ n";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...