2012-02-14 7 views
1

私はZend Formを使用して、データベースにカレッジクラスを追加することができます。私はデータを収集し、それをDoctrine 2で永続させます。データはすべてテーブルにあります。データを取得すると、すべての準備が整います。Zend_Json ::二重引用符で問題をエンコード

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を使用しています。私はdatatableの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 Formに更新を行うためにデータを再入力しようとすると、この問題が発生するので、何か本当に間違っている必要があります。

また、Doctrineの結果をダンプすると、引用されたすべてのデータがすぐに使用できます。しかし、$ form-> setDefaults($ results [0])の後、フォームのフィールドは空白になります。

本当にありがとうございます。

私はあなたがこれが動作しているように一定 JSON_HEX_QUOT

を使用する必要があると思う

答えて

2

私は同じ問題がありました。 。解決策は、引用符がありませんでした」のではなく、「それを固定し、この答え(How to replace Microsoft-encoded quotes in PHP)からの方法で置き換える行うヌルを返すようにjson_encode()を引き起こしていた(Microsoftは引用符をコードする)ということである

UPDATE:。

Zendのも、あなたのための文字列を解析エンコーダを持っている。しかし、私はビューヘルパーでそれをしようと、あなたのブートストラップにZend_Json::$userBuiltinEncoderDecoder = trueを設定する必要があり、それはその後、PHPのjson_encode

0

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

私はZendの/ Json.phpコードに深く持って、あなたがしたい場合は、それがどのように見えますJSON_HEX_QUOTを使用すると、Zend_Jsonは定数を渡さないため、PHP関数を使用する必要があります。

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

私は、ZFはPHP 5.2.6標準と$オプションは、PHP 5.3でjson_encodeに追加されましたにコーディングされているためであると考えています。

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

「がノーマルエコー*アクションのすべてのオプションを示す

例2 * json_encode()例:0

ここでは、基準は、PHPマニュアルからです: "、json_encode($ a)、" \ n "; echo "Tags:"、
json_encode($ a、JSON_HEX_TAG)、 "\ n";エコー "Apos:"、
json_encode($ a、JSON_HEX_APOS)、 "\ n"; echo "Quot:"、
json_encode($ a、JSON_HEX_QUOT)、 "\ n";エコー "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 = array( 'foo' => 'bar'、 'baz' => 'long');

echo "連想配列は常にオブジェクトとして出力されます。"、json_encode($ d)、 "\ n"; echo "連想配列は常にオブジェクトとして出力されます:"、 json_encode($ d、JSON_FORCE_OBJECT)、 "\ n \ n";

+0

の代わりに使用します。私はJSONを見ました。私はテーブルを生成するときに、ビューヘルパーでenableJsonExprFinderを使用しています。enableJsonEを使用しないでxprFinder私は手動で行うことなくjsonに関数を構築する簡単な方法を知らない。 – lumberjacked

+0

ええと、これはまさに私が見つけたものですが、彼の呼び出しコードが正しいことを確認する必要がありました。 Zendのバージョンの代わりにPHPのバージョンを使うべきです。そうした場合、デフォルトで引用符をエスケープする必要があります。 –

関連する問題