在javascript中使用转义函数需要帮助

时间:2010-02-03 12:37:53

标签: javascript

我在jsp文件中使用了以下的javascript函数

 <script language="javascript">

                    function openPopup()
                    {
                        var firstname = escape(<%=addressBean.getFirstName()%>);
                        var lastname = escape(<%=addressBean.getLastName()%>);
                        alert(firstname);
                        alert(lastname);
                        var mywindow = window.open('<%= link("*", "BBFBUpdatePickupInfo")%>&ShoppingCartKey=<%=cartKey%>&operation=<%=operation%>&isEproAcc=<%=isEpro%>&firstName="+firstname+"&lastName="+lastname+"&areaCode=<%=addressBean.getPhoneAreaCode()%>&phoneNum=<%=addressBean.getPhoneNumber()%>','static','width=625,height=500,toolbar=0,location=0,directories=0,status=0,menuBar=0,scrollBars=yes,resizable=0');
                        mywindow.focus();
                    }


                </script>

当addressBean.getFirstName()和addressBean.getLastName()返回名称如“RED”作为firstname而“WHITE”作为lastname时,它正常工作。但是当这两个方法返回名称如“VALENTINE”作为名字而“D'LOREY”作为第二个名称时,它会抛出javascript错误以下

  Error: Unterminated string constant
  Code: 0

请帮我解决这个问题。提前致谢

4 个答案:

答案 0 :(得分:3)

(你没有提到你的服务器端语言;下面我假设是Java,所以如果是其他的话就做出调整。)

考虑执行此操作时实际发送到浏览器的内容:

var firstname = escape(<%=addressBean.getFirstName()%>);

当它消失时,它看起来像这样:

var firstname = escape(JOE);

...这几乎肯定不是你想要的 - 没有引号,一开始。

首先我们需要引用:

var firstname = escape("<%=addressBean.getFirstName()%>");

但是我们还需要转义字符串中的任何内容,这会在生成的JavaScript字符串中出现问题(在服务器上将其发送到浏览器时)。关闭袖口,这至少是引号和反斜杠,所以:

var firstname = escape("<%=addressBean.getFirstName().replace("\\", "\\\\").replace("\"", "\\\"")%>");

...但这根本不彻底​​,你需要处理很多其他情况(字符串中的换行符等)。实际上,你将需要一个能够彻底完成工作,处理(例如)unicode序列等的实用程序功能,如果它们有可能存在于源数据中(如果这涉及人们的名字。)

许多人都注意到escape代替encodeURIComponent,而不是{{1}}。

答案 1 :(得分:1)

您需要正确格式化字符串,以便它与变量定义中的JavaScript语法兼容。

这是我通过json_encode()函数对PHP做的事情:

var firstname = <?=json_encode(addressBean.getFirstName())?>;

JSON解析器负责转义适当的值并使其与JavaScript兼容。

我不熟悉您的语言,但如果是ASP,您可以尝试aspjson

答案 2 :(得分:0)

HTML和Javascript是2个转义。我有这个问题并且非科学地观察到从georss到KML刚刚解决的切换(太快)

答案 3 :(得分:0)

只需创建url服务器端,因为它由服务器端变量组成。当你掌握服务器端的所有内容时,无需使用javascript中的字符串和转义。