JSON stringify 在有 space 或 non-letter 字符时创建下划线,为什么?

JSON stringify creates underscore when there is a space or non-letter character, why?

你好,我有一个函数,它使用 POST 方法将数据发送到服务器,然后我使用 PHP 解码 JSON 字符串。我正在使用 headers "Content-Type": "application/x-www-form-urlencoded" 和 body JSON.stringify

我最后得到的是这个字符串:

[{"registration":true,"name":"dfsdf","last":"fsfs","email":"fdsfsd@gmail_com","phone":"fdsfds","city":"fsfsd","password":"password"}] =>

然后我使用此代码 json_decode(key($_POST)) 来解码字符串,最后得到:

stdClass Object
(
    [registration] => 1
    [name] => dfsdf
    [last] => fsfs
    [email] => fdsfsd@gmail_com
    [phone] => fdsfds
    [city] => fsfsd
    [password] => password
)

我的问题是当有 space 或任何其他 non-letter 字符时,例如在这个电子邮件地址中,我得到了一个下划线。我已经发送 fdsfsd@gmail.com,但我最终收到 fdsfsd@gmail_com。你知道怎么解决吗?如果此信息有价值,我正在使用 Wix 支持的模块顺便发送数据。这是我的完整代码:

import {fetch} from 'wix-fetch';

export function registration(name, last, email, phone, city, password) {
    return fetch("https://api.demo.com/auth.php", {
        "method": "post",
        "headers": {
            //   "Content-Type": "application/json"
            "Content-Type": "application/x-www-form-urlencoded"
        },
        "body": JSON.stringify({
            registration: true,
            name: name,
            last: last,
            email: email,
            phone: phone,
            city: city,
            password: password,
        }),
    }).then((response) => {
        if (response.ok) {
             return response.text();
            // return response.json();
        } else {
            return Promise.reject("Fetch did not succeed");
        }
    });
}

到目前为止我已经尝试过这些东西,但我总是以空字符串结束:

我终于设法完成了。我不得不使用这个 php://input,它终于奏效了。这是我使用的代码行:

$data = json_decode(file_get_contents('php://input'), true);

这是输出

Array
(
  [registration] => 1
  [name] => dfsdf
  [last] => fsfs
  [email] => fdsfsd@gmail.com
  [phone] => fdsfds
  [city] => fsfsd
  [password] => password
)