2010-01-26 73 views
1

我有这段代码:JavaScript的符号(&)在返回数据不会显示为值

... 
var aData = request.responseXML.getElementsByTagName('data')[0]; 
var sDescription = aData.getElementsByTagName('description')[0].firstChild.data; 

alert(escape(sDescription)); 
document.getElementById('tempLabourLineDescription').value = sDescription; 
... 

sDescription的输出:SUPPORT ASSY-FUEL TANK MOUNTING, R&R (LH) (L-ENG)

我认为这是显而易见的是什么,我想在这里做(获得在一个叫tempLabourLineDescriptionsDescription但只是将无法正常工作。

但是,如果我在PHP脚本替换或从该字符串这一切工作正常删除& -char。所以我想,刚刚逃脱了弦弦。但那不会起作用。 警告字符串不工作,直到我删除&-字符。

这是干什么的? sDescription不是xml文件中的字符串吗? 我该如何解决这个问题?

回答

1

这是很难说没有看到你的输出脚本,但尝试的第一件事情是掩盖和号:&

更合适的方法,但是,将CDATA添加到您的XML输出:

<data><![CDATA[SUPPORT ASSY-FUEL TANK MOUNTING, R&R (LH) (L-ENG)]]></data> 

客户端的XML解析器应该理解它没有问题。

+0

谢谢!我没有想到这一点。从来没有向我发现&不是有效的XML。 CDATA完成了这一切。 JavaScript吃了没有问题,也没有逃脱。 – 2010-01-26 18:54:11

+0

不错!它也可以使用'<' and '>'而不必逃避它。 – 2010-01-26 19:10:14

2

答案就在这个片段:

var aData = request.responseXML... 

你希望XML。一个&本身不是合法的XML。你需要输出你的结果是这样的:

支持总成,燃料箱安装,R &放大器; R(LH)(L-ENG)

0

您可以通过使用HTML当量逃脱符号。 &amp;

0

如果无法改变从服务器XML输出(这不是你的应用程序或其他一些问题),一个“黑客”的解决将是:

function htmlizeAmps(s){ 
    return s.replace(/\x26/g,"&amp;"); //globalreplace "&" (hex 26) with "&amp;" 
} 
document.getElementById('tempLabourLineDescription').value = htmlizeAmps(sDescription);