'+'字符在HttpParams angular 6中转换为空间

时间:2018-08-21 06:20:57

标签: json angular typescript encoding

我有一个JSON对象,并使用HttpParams传递了它,但它隐蔽+到空间并发送到后端。我尝试了所有可能的方法,但没有人解决JSONObject字符串的问题。

this.updateUser({"name":"ABC","mobile": "+911234567890","text":"1 + 2 = 3"});

public updateUser(myObj) {

    const body = new HttpParams().set('user_object', JSON.stringify(myObj));
    return this.http.post(url, body, {
      headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8')
    });
  }

当我在网络中检查时,包含+字符的对象会自动转换为空格。

1 个答案:

答案 0 :(得分:2)

这是一个常见问题。 URL使用+字符来分隔两个单词。为了在参数值中使用+字符,您需要先对参数值进行编码,然后再将其添加为URL的一部分。 Javascript / TypeScript为此目的提供了encodeURI()函数。

  

URL编码将字符转换为可以传输的格式   通过互联网。 [w3Schools Reference]

这是解决此问题的方法:

let mobile = encodeURI("+911234567890");
let text = encodeURI("1 + 2 = 3");
this.updateUser({"name":"ABC","mobile": mobile,"text":text});

public updateUser(myObj) {
  const body = new HttpParams().set('user_object', JSON.stringify(myObj));
  return this.http.post(url, body, {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8')
  });
}

OR

您可以在updateUser()方法内部进行编码:

this.updateUser({"name":"ABC","mobile": "+911234567890","text":"1 + 2 = 3"});

public updateUser(myObj) {
  let encodedJson = encodeURI(JSON.stringify(myObj));
  const body = new HttpParams().set('user_object', encodedJson);
  return this.http.post(url, body, {
  headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8')
  });
}

OR

在发送到服务器之前,使用正则表达式替换+

let jsonData = JSON.stringify(myObj);
jsonData = jsonData.replace(/\+/gi, '%2B');