通过php执行警报功能时出现Javascript错误

时间:2009-12-02 13:27:03

标签: php javascript

我在我的一个应用程序中使用融合地图。

在其中一个示例中,我必须将值从一个地图传递到另一个地图,

我遇到一个问题,如果传递的数据是数字,它正确显示警告消息,但如果是字符串则会产生错误:

NM is not defined

的javascript:警报(NM)()

我的代码如下:

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(".($rs1['Internal_Id']) . ")'  />";

如果我更改链接部分(在alert中传递单引号):

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert('".($rs1['Internal_Id']) . "')'  />";

显示无效的xml数据。

请帮我解决这个问题

由于

的Pankaj

3 个答案:

答案 0 :(得分:1)

使用\"而不是'来围绕JavaScript字符串。

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(\"".($rs1['Internal_Id']) . "\")'  />";

发生的事情是生成的xml是这样的:

<entity id='NM' value='1' link='javascript:alert('NM')'/>

您应该能够从SO中看到语法突出显示在javascript:alert('之后结束链接属性的值,因为您使用与用于包围属性值的javascript相同的引号。

使用不同的引用("而非')不会结束属性值(再次参见语法高亮显示)

<entity id='NM' value='1' link='javascript:alert("NM")'/>


在PHP中,我们必须转义引用(使用\),因此它不被php解释器解释为特殊字符并用于结束字符串,这就是为什么在php中你必须写{{1} }

答案 1 :(得分:0)

你应该改变你的

ink='javascript:alert('".($rs1['Internal_Id']) . "')'

通过

ink='javascript:alert(\"".($rs1['Internal_Id']) . "\")'

答案 2 :(得分:0)

尝试:

$strXML .= "<entity id='" . $rs1['Internal_Id'] . "' value='" . round((($rs1['datap'] /  $sumdata) * 100),2) . "' link='javascript:alert(\"".($rs1['Internal_Id']) . "\")'  />";

基本上转义警告引号:)