我有一个Zend表单,允许您将大学课程添加到数据库中。我收集数据并坚持使用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));
具有双引号的所有值都被编码为null。
"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])之后,表单中的字段是空白的。
非常感谢任何帮助。
答案 0 :(得分:2)
我遇到了同样的问题。解决方案是引号不是“而是”(微软编码的引号)导致json_encode()
返回null。用这个答案(How to replace Microsoft-encoded quotes in PHP)替换方法修复了它。
更新:
Zend还有一个为你解析字符串的编码器。但是你需要在引导程序中设置Zend_Json::$userBuiltinEncoderDecoder = true
然后它将使用它而不是php的json_encode
答案 1 :(得分:0)
我认为您需要使用常量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被添加到PHP 5.3.0中的json_encode
这是php手册中的参考:
示例#2 *一个json_encode()示例,显示了所有选项*
<?php $a = array('<foo>',"'bar'",'"baz"','&blong&');
echo“Normal:”,json_encode($ a),“\ n”; echo“标签:”,
json_encode($ a,JSON_HEX_TAG),“\ n”;回声“Apos:”,
json_encode($ a,JSON_HEX_APOS),“\ n”;回声“Quot:”,
json_encode($ a,JSON_HEX_QUOT),“\ n”; echo“Amp:”,
json_encode($ a,JSON_HEX_AMP),“\ n”;回声“全部:”,
json_encode($ A,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP) “\ n \ n” 个;$ b = array();
echo“将数组输出为数组:”,json_encode($ b),“\ n”;回声 “将数组输出为对象:”,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 = array('foo'=&gt;'bar','baz'=&gt;'long');
echo“关联数组总是输出为对象:”,json_encode($ d), “\ n” 个; echo“关联数组总是输出为对象:”, json_encode($ d,JSON_FORCE_OBJECT),“\ n \ n”;