我正在连接到一个PHP Web服务,该服务返回JSON中的图像URL(使用PHP json_encode
函数)。
我在mootools 1.2.5系统中工作,该系统也需要在手机上工作。
数据中返回的图像节点的格式如下:
"thumb": "<img src=\"http://photos.imgserv.com/201107222000000.jpg\" />"
由于某种原因,当我将response.JSON传递给他们时,iphone和android会看到一个NULL值。我可以毫无问题地将response.text对象传递给它们,但是由于双引号未正确转义,因此JSON.decode失败。如果我在图像标签上手动添加双反斜杠,如下所示:
"thumb": "<img src=\\"http://photos.imgserv.com/201107222000000.jpg\\" />"
一切都按设计工作。但是,我有一段时间获得正确的正则表达式来替换原始response.text中的\"
\\"
。
是否有一种“正确”的方式来处理对手机的响应.JSON,以及如何正确编写string.replace()正则表达式以处理这些转义字符?
谢谢!
编辑添加:
这里有两个带有单反斜杠和两个反斜杠的jsfiddles来显示问题:
单反斜杠(不能正确解码/解析) - http://jsfiddle.net/Qde6F/ 双反斜杠(正确解码/解析) - http://jsfiddle.net/Qde6F/1/
答案 0 :(得分:0)
var src = "\"thumb\": \"<img src=\\\"http://photos.imgserv.com/201107222000000.jpg\\\" />\"";
alert(src);
var dest = src.replace("\\\"","\\\\\"");
alert(dest);
即,替换表达式为replace("\\\"","\\\\\"")
,将\"
替换为\\"
好的,这在jsfiddler
中对我有用var text = '[{"thumb": "<img src=\"http://photos.imgserv.com/201107222000000.jpg\" />" }]';
console.dir(text);
var dest = text.replace(/(src=)(\")([^"]+)(\")/g,"$1\\\"$3\\\"");
console.dir(dest);
console.dir(JSON.decode(dest));
基本上,正则表达式会将src="url"
重写为src=\"url\"
。