我正在使用这样的一些JavaScript:
echo '<a href="javascript:playSong'."('$row[artist]','$row[title]','$row[sourcefile]')".'">';
我的问题是有时我的$row[artist]
和$row[title]
变量包含双qoutes。
发生这种情况时会中断javascript:playSong();
函数调用。
例如,如果该行输出如下:
<a href="javascript:playSong('Danny Elfman','Beetlejuice Theme (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')">
一切都会好的。
但有时候这个功能会是这样的:
<a href="javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')">
然后会导致我的网站认为命令以“主题”之前的双引号结束,从而导致其失败。
有没有办法我应该正确引用我的javascript,所以它将函数内部的双引号视为文本而不是函数的结尾。
我正在使用addslashes()
并尝试了其他各种编码,但似乎并没有这样做。
答案 0 :(得分:3)
此处的最佳解决方案是停止使用href="javascript:…
并开始使用unobtrusive JavaScript和progressive enhancement。
如果您确实想继续沿着这条路走下去,那么您需要记住,您正在处理三种种不同的语言,并在链中生成另一种语言。
从JavaScript开始。然后使其与HTML一起使用。然后使用PHP。
javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')
此处没有语法错误。你只是在一个字符串中有双引号。
href="javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')"
现在,您将JavaScript嵌套在HTML属性中,该HTML属性用双引号分隔。这意味着JS中的双引号现在是一个问题,因为它在脚本中途终止了属性值。
以HTML的常用方式处理这些引号。将它们替换为HTML实体:"
href="javascript:playSong('Danny Elfman','Beetlejuice "Theme" (Kamei Halloween Edit)','2009-10-31-10-52-01.4521.data','28330')"
然后我们进入PHP:
echo '<a href="javascript:playSong'."('$row[artist]','$row[title]','$row[sourcefile]')".'">';
处理引号内引号内的引号是一种痛苦。所以不要试试。
href="javascript:playSong('<?php echo $row[artist] ?>','<?php echo $row[title] ?>','<?php echo $row[sourcefile]; ?>')"
你似乎在那里的例子之间失去了争论。
遵循处理使用PHP将内容插入HTML的常规规则:htmlspecialchars
href="javascript:playSong('<?php echo htmlspecialchars($row[artist]); ?>','<?php echo htmlspecialchars($row[title]); ?>','<?php echo htmlspecialchars($row[sourcefile]); ?>')"
答案 1 :(得分:1)
使用反斜杠转义仅对您无法帮助,因为您还需要在html中转义它们,尝试使用'
作为单引号,使用"
作为双引号嵌入式js函数。
这应该做你需要的。
思南。
答案 2 :(得分:0)