【问题标题】:Dealing with plus signs showing up when using json_encode() in PHP处理在 PHP 中使用 json_encode() 时出现的加号
【发布时间】:2012-10-02 12:51:42
【问题描述】:

我正在使用 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。

【问题讨论】:

  • setrawcookie() 不应用 urlencoding。如果这对您的有效负载可行是另一个问题。

标签: php jquery json forms cookies


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这很奇怪。 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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多