在javascript中修复不正确的转义字符串

时间:2012-06-04 23:03:58

标签: php android ios json mootools

我正在连接到一个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/

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\"