PHP 转义纬度和长坐标


PHP escaping lat and long coordinates.

我想将经度和纬度值传递给 json 文件。我当前拥有的代码转义了值并添加了引号。

示例 JSON 输出{"votes":["{'"lat'":'"51.426799'",'"lng'":'"-0.3313419999999496'"},{'"lat'":'"52.30897'",'"lng'":'"-1.9409359999999651'"}"]}

我需要删除反斜杠和引号。这是我正在使用的 PHP:

    if (isset($_POST['lat']) && isset($_POST['lng'])) {
        $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);
        $jsonObject = json_encode($params);
        $json = file_get_contents('my_json_data.json');
        if(empty($json)){
            $jsonObject = json_encode(array('votes' => [$jsonObject]));
            file_put_contents('my_json_data.json', $jsonObject);
        }else{
            $json = json_decode($json, true);
            $newJson = $json['votes'][0] . "," . $jsonObject;
            $jsonObject = json_encode(array('votes' => [$newJson]));
            file_put_contents('my_json_data.json', $jsonObject);
        }
    }
    else {
        echo "Noooooooob";
    }

你编码了两次。尝试更改

$jsonObject = json_encode($params);

简单地

$jsonObject = $params;

要删除引号,请强制转换 PHP 字符串:

$params = array('lat' => (float)$_POST['lat'], 'lng' => (float)$_POST['lng']);
if (isset($_POST['lat']) && isset($_POST['lng'])) {
    $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);
    $json = file_get_contents('my_json_data.json');
    if(empty($json)){
        $params["votes"] = 1;
        $jsonObject = json_encode(array('votes' => $params));
        file_put_contents('my_json_data.json', $jsonObject);
    }else{
        $json = json_decode($json, true);
        $newJson = $json['votes']++;
        $jsonObject = json_encode($json);
        file_put_contents('my_json_data.json', $jsonObject);
    }
}
else {
    echo "Noooooooob";
}

尝试重置my_json_data.json文件。

edit1:好的,你用json_encode两次..首先你把它编码成字符串,使反斜杠,然后你再次编码它。

你对

$params编码两次。

首先:$jsonObject = json_encode($params);,所以$jsonObject包含一个 json 编码的$params(作为字符串)

将此字符串放到此处的投票数组后:

$jsonObject = json_encode(array('votes' => [$jsonObject]));

或这里

$newJson = $json['votes'][0] . "," . $jsonObject;

再次将其编码为字符串,而不是数组后:

$jsonObject = json_encode(array('votes' => [$newJson]));

我想你想这样做吗:

if (isset($_POST['lat']) && isset($_POST['lng'])) {
    $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);
    $json = @file_get_contents('my_json_data.json');
    if(empty($json)){
        $jsonObject = json_encode(array('votes' => [$params]));
        file_put_contents('my_json_data.json', $jsonObject);
    }else{
        $json = json_decode($json, true);
        $json['votes'][] = $params;
        file_put_contents('my_json_data.json', json_encode($json));
    }
}
else {
    echo "Noooooooob";
}