如何在javascript中正确使用引号

时间:2009-11-01 14:33:29

标签: php javascript

我正在使用这样的一些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()并尝试了其他各种编码,但似乎并没有这样做。

3 个答案:

答案 0 :(得分:3)

此处的最佳解决方案是停止使用href="javascript:…并开始使用unobtrusive JavaScriptprogressive 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实体:&quot;

href="javascript:playSong('Danny Elfman','Beetlejuice &quot;Theme&quot; (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中转义它们,尝试使用&#39;作为单引号,使用&#34;作为双引号嵌入式js函数。

这应该做你需要的。

思南。

答案 2 :(得分:0)

编辑:哦。你需要在html中转义它。试试htmlspecialchars