1

我的 facebook 应用程序使用 facebook 的 ui 方法,您将 json 传递给该方法。然而,我的 php 变量可能包含撇号......保存它们的最佳方法是什么,同时将它们正确传递给 fb 方法?

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

3 回答 3

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"
}
于 2012-04-10T22:36:33.327 回答
2

您需要“转义”它们,这意味着在它们之前添加一个反斜杠。

PHP 中有一些方便的函数可以帮助您完成此操作:(json_encode专门用于正确格式化 JSON)或addslashes.

但是,您应该使用json_encode而不是addslashes在这种情况下,因为addslashes 可能会根据输入输出不正确的 JSON 格式。

于 2012-04-10T22:30:40.110 回答
1

OP 需要转义撇号 - 这是 json_encode 不做的事情。经常遇到的问题是需要在php中使用json_encode生成一个json字符串并放在javascript代码中(如OP示例)。由于 Javascript 没有 heredoc 注释,因此您需要转义撇号或双引号以防止解析错误。

例如:

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

但是,这并不是最佳的,因为它有时会在 js 端保持为 \u0027。所以理想情况下,我们需要再次使用 js 替换我们用来翻译报价的任何代码:

var code = '<?=parse(json_encode($data)) ?>';
code = code.replace(/\\\\u0027/g, "'");
jQuery.parseJSON(code);
于 2012-09-13T20:03:13.033 回答