通过语义标记传递PHP生成的JSON

时间:2012-03-05 04:26:17

标签: php javascript json

another question中,有人指出使用语义标记可以是一种非常简洁的方法,可以将数据传递给onclick函数,沿着下面的代码行。

我有第二个问题涉及传递JSON并让接收函数识别它。我有一个PHP生成的JSON值[{"authed":"2012-03-04 17:24:24"},{"authed":"2012-03-04 11:44:38"}],我需要传递给一个函数。直接回复<a>标记将无效,因此我使用urlencode()获取:

<a href="javascript:void(0)" data-auth="%5B%7B%22authed%22%3A%222012-03-04+17%3A24%3A24%22%7D%2C%7B%22authed%22%3A%222012-03-04+11%3A44%3A38%22%7D%5D" onclick="popup(this)">click</a>

不幸的是,当我从popup()发出警告时,我通过以下代码:

function popup(t) {
  var auth = t.getAttribute('data-auth');

  alert(decodeURI(auth));
}

我得到了

[{"authed"%3A"2012-03-04+17%3A24%3A24"}%2C{"authed"%3A"2012-03-04+11%3A44%3A38%22"}]

JSON.parse()无法处理。有关使用此模式解码/传递JSON的任何建议吗?

1 个答案:

答案 0 :(得分:0)

你需要使用htmlspecialchars()来转义html - 就像你应该为你在html中回应的所有做的那样。 (你这样做了吗?为了防止生成无效的html?)不要使用urlencode(),它用于编码url路径或查询参数的部分。

<?php
$data = array(array('authed'=>'2012-03-04 17:24:24'), array('authed'=>'2012-03-04 11:44:38'));
$jsondata = json_encode($data);
?>
<a data-auth="<?php echo htmlspecialchars($jsondata, ENT_COMPAT, 'UTF-8')?>" onclick="popup(this)">click</a>