我在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
请帮我解决这个问题。提前致谢
答案 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中的字符串和转义。