我的JSON字符串无法通过HTTP GET请求获得完整

时间:2014-03-22 23:09:48

标签: javascript php json

当我将我的数组发送到我的php文件时,它不完整地转到php文件。 我的变量是:

[["╪▒┘à┘╛┘╪د","67126881188552864","Empty,Empty,Empty,Empty,8644,-360,-4,8691,-3
.48,-313,1015,4.334 M,1392/12/28,12:30:08,3.99 M,10 B,10%,530,16.4,16.38,┘à╪ش╪د╪
▓,7,3130,8644,1,50,5000, , , ,8644,11553,359,307,8645,1,1,8655,11
030,2,┌»╪▒┘ê┘ç ┘à┘╛┘╪د (╪│┘ç╪د┘à┘è ╪╣╪د┘à) (╪▒┘à┘╛┘╪د),╪ذ╪د╪▓╪د╪▒ ╪د┘ê┘ (╪ز╪د
╪ذ┘┘ê┘è ╪د╪╡┘┘è) ╪ذ┘ê╪▒╪│ ,connOK"]]

我使用HTTP GET请求发送数据,如下所示

    var myJsonString = JSON.stringify(arr);

    page.open('http://localhost/bptest/danger/get.php?data='+myJsonString,function(status){
            console.log("Page opened");
            if (status !== 'success') {
                console.log('FAIL');
            } else {
                console.log("REPLY FROM SERVER:");
                console.log(page.content);
            }});

结束我的简单php文件在代码下面:

<li><?php echo $_GET["data"]; ?></li>

和php得到这个:

[["?????","67126881188552864","Empty,Empty,Empty,Em
pty,8644,-360,-4,8691,-3.48,-313,1015,4.334 M,1392/12/28,12:30:08,3.99 M,10 B,10
%,530,16.4,16.38,????,7,3130,8644,1,50,5000,

为什么它从php重新启动时崩溃以及我如何解决这个问题

4 个答案:

答案 0 :(得分:2)

您必须使用encodeURI()对json字符串进行编码。

请参见此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

答案 1 :(得分:1)

您必须使用带有JSON的UTF-8字符集。检查这一点:

  • Header charset
  • 使用UTF-8编码php文件
  • 检查receveid数据是否为UTF-8编码

我认为您的应用的一侧字符集不好或在数据传输过程中更改。

答案 2 :(得分:1)

试试这个

 var myJsonString = JSON.stringify(encodeURI(arr));

    page.open('http://localhost/bptest/danger/get.php?data='+myJsonString,function(status){
            console.log("Page opened");
            if (status !== 'success') {
                console.log('FAIL');
            } else {
                console.log("REPLY FROM SERVER:");
                console.log(page.content);
            }});

答案 3 :(得分:1)

注意<meta charset="utf-8" />行(文件本身应该是UTF-8,这应该是任何体面的文本编辑器的默认值),还要使用encodeURIComponent,这是你想编码的时候适合查询字符串的内容(与encodeURI不同,它还会对&=等字符进行编码。

<强> HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script>
var arr = [["╪▒┘à┘╛┘╪د","67126881188552864","Empty,Empty,Empty,Empty,8644,-360,-4,8691,-3\
.48,-313,1015,4.334 M,1392/12/28,12:30:08,3.99 M,10 B,10%,530,16.4,16.38,┘à╪ش╪د╪\
▓,7,3130,8644,1,50,5000,&nbsp;,&nbsp;,&nbsp;,8644,11553,359,307,8645,1,1,8655,11\
030,2,┌»╪▒┘ê┘ç ┘à┘╛┘╪د (╪│┘ç╪د┘à┘è ╪╣╪د┘à) (╪▒┘à┘╛┘╪د),╪ذ╪د╪▓╪د╪▒ ╪د┘ê┘ (╪ز╪د\
╪ذ┘┘ê┘è ╪د╪╡┘┘è) ╪ذ┘ê╪▒╪│ ,connOK"]];
var myJsonString = encodeURIComponent(JSON.stringify(arr));

page.open('http://localhost/bptest/danger/get.php?data='+myJsonString,function(status){
    console.log("Page opened");
    if (status !== 'success') {
        console.log('FAIL');
    } else {
        console.log("REPLY FROM SERVER:");
        console.log(page.content);
    }
});
</script></head><body></body></html>

<强> PHP:

请注意安全风险评论(您还可以通过使用&#34; text / plain&#34;作为内容类型来避免风险,但如果您需要,则不会将其呈现为HTML)。

<?php
header('Content-type: text/html;charset=utf-8');
echo $_GET['data']; // You better fix this after testing, as it invites XSS scripting attacks!
?>