纠正通过JSON传输的URL的URL解析

时间:2015-05-24 16:49:15

标签: javascript php ajax json

这是我的ajax上下文的简化PHP方面:

// in a for loop
    $text = "/home/ubuntu/CANE-HDD-100/y.txt"
    // $text_encoded = urlencode($text);
    // $text_encoded = preg_replace("/(\-)/", "%2D", $text_encoded);
    $text_encoded = "%2Fhome%2Fubuntu%2FCANE%2DHDD%2D100%2Fy.txt"
    $structure[$i] = $text_encoded;

echo json_encode($structure);

这是JS方面:

request.onload = function()
{
    var cleanedText = JSON.parse(this.responseText);
    alert(cleanedText);
};

抛出以下错误:

  

SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符

如果我将JSON.parse(this.responseText)替换为decodeURI(this.responseText),我会cleanedText等于

  

/home/ubuntu/CANE-HDD-100/y.txt   ["%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"]

我不喜欢,因为for上的一个hypotetic cleanedText循环会将该变量的每个元素(正确)视为一个字符,而我显然希望将元素作为整个URL

一种可能的,肮脏的解决方法是在cleanedText上设置一些正则表达式以恢复每个网址,但我想知道是否会有更清洁的方式。

1 个答案:

答案 0 :(得分:0)

w3re的评论必须是正确的。您必须拥有格式错误的JSON。我们可以通过从decodeURI获取输出,然后通过encodeURI运行它来获取,从而获得必须是PHP的原始字符串,然后在其上尝试JSON.parse。我们收到错误:

JSON.parse(encodeURI('/home/ubuntu/CANE-HDD-100/y.txt ["%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"]'))
(program):1 Uncaught SyntaxError: Unexpected token /

该错误来自Chrome,但是:1说的是“第1行”而/位于第1列,所以我认为这是您看到的错误。

基本上,这个字符串是无效的JSON,因为开头的所有内容都没有用引号括起来。

但是,例如,如果你把它全部放在引号中并逃避现有的引用,这将有效:

JSON.parse('"/home/ubuntu/CANE-HDD-100/y.txt \\"%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt\\""')

或使用数组:

JSON.parse('["/home/ubuntu/CANE-HDD-100/y.txt", "%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"]')

或对象:

JSON.parse('{"/home/ubuntu/CANE-HDD-100/y.txt": "%2Fhome%2Fubuntu%2FCANE-HDD-100%2Fy.txt"}')

所以在你的JSON编码和解码中你的PHP或JavaScript中必须出错。为了进一步提供帮助,我需要查看更多代码。