2012-04-10 5 views
1

私のFacebookブックアプリケーションは、facebookのuiメソッドを使って、jsonを渡します。しかし、私のPHP変数には、アポストロフィが含まれている可能性があります... fbメソッドに適切に渡しながら、それらを保持する最善の方法は何ですか?アポストロフィを使って何かをjsonに渡す方法

FB.ui(
    { 
     method: 'feed', 
     name: '<? echo $tname; ?>', 
     link: '<? echo $short; ?>', 
     caption: '<? echo $description; ?>' 
    }, 

答えて

3

使用json_encode

$myJSON = array(
    'method'  => 'feed', 
    'name'  => $tag_line.' at '.$owner_name, 
    'link'  => $short, 
    'caption'  => $description, 
    'description' => $short 
); 

$myJSON = json_encode($myJSON); 

$myJSONは現在、JSON形式やページにエコーする準備で自分のデータと文字列が含まれています。

{ 
    "method"  : "feed", 
    "name"  : "tag_line at owner_name", 
    "link"  : "short", 
    "caption"  : "description", 
    "description" : "short" 
} 
2

「エスケープ」する必要があります。つまり、それらの前にバックスラッシュを追加する必要があります。

json_encode(具体的にはJSONを適切にフォーマットするため)やaddslashesなど、便利な機能がPHPで用意されています。 addslashes出力が誤入力に応じて、JSONの書式があるので

しかし、あなたは、この場合にはjson_encodeではなくaddslashesを使用する必要があります。

+4

addslashesは*非常に悪いアドバイスです。 – Tomalak

+0

@Tomalak JSONのためには良い機能ではないことは事実です( '' 'は実際にエスケープされるべきではないので)。しかし、質問が何を求めているのか*達成しています。私は答えを並べ替えます。 – jli

+2

「十分に近い」は引数ではありません。 addslashesは、特にその目的のための専用の機能がある場合には、間違った使い方です。 OPが必要とするものにも近い*ではありません。なぜなら、うまくエスケープされた文字列であっても、彼が持っているものはJSONではないからです。 – Tomalak

1

OPはアポストロフィをエスケープする必要があります.json_encodeでは実行できません。よく遭遇する問題は、JSON文字列をPHPでjson_encodeを使って生成し、javascriptコードに配置する必要があることです(OPの例のように)。 Javascriptにheredocコメントがないので、解析エラーを防ぐためにアポストロフィや二重引用符をエスケープする必要があります。

何かのような:それは時々JS側の\ u0027として滞在するよう

jQuery.parseJSON('<?=str_replace("'", "\\\\u0027", json_encode(array('something' => "John's")))?>'); 

しかし、イベント、これは最適ではありません。理想的には、jsを使用して見積もりを翻訳するために使用したコードを置き換える必要があります。

var code = '<?=parse(json_encode($data)) ?>'; 
code = code.replace(/\\\\u0027/g, "'"); 
jQuery.parseJSON(code); 
関連する問題