处理在PHP中使用json_encode()时出现的加号

时间:2012-10-11 18:58:56

标签: php jquery json forms cookies

我正在使用PHP将表单的值作为JSON保存到cookie中,如下所示:

// set cookie with search values so we can use jQuery to repopulate the form
setcookie('jobSearchValues', json_encode($form_state['values']), 0, '/');

这很好用,然后在JavaScript方面,我可以使用它来获取值:

var jobSearchValues = JSON.parse($.cookie("jobSearchValues"));
$("#keywords").val(jobSearchValues.keywords);

同样这很有用,但问题是当表单中某个字段的值中有空格时,空格会被替换为“+”。因此,当表单重新填充时,文本字段显示如下,例如“hi + mom”。有没有更好的方法来解决这个问题?顺便说一下,$form_state['values']是PHP array。表单中有4个字段,我将其设置为Cookie中的JSON。

2 个答案:

答案 0 :(得分:1)

使用setrawcookie( '<name>', rawurlencode( json_encode( $value ) ), ... )然后手动url-decode&amp; json-parse在客户端(使用JSON.parse(decodeURIComponent(cookie))

答案 1 :(得分:0)

这很奇怪。 json_encode不应该用+ ..

替换空格

setcookie可能是urlencoding它。

在使用之前,您必须在javascript中使用urldecode

试试这个:

(摘自phpjs)

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

然后

var jobSearchValues = JSON.parse($.cookie("jobSearchValues"));
$("#keywords").val(urldecode(jobSearchValues.keywords));