我正在使用一些像这样的 JavaScript:
echo '<a href="javascript:playSong'."('$row[artist]','$row[title]','$row[sourcefile]')".'">';
我的问题是有时我的$row[artist]
和$row[title]
变量包含双引号。
当发生这种情况时,它会破坏 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()
并尝试了各种其他编码,但似乎没有任何效果。
最佳答案
这里最好的解决方案是停止使用 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 属性中。这意味着 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]); ?>')"
关于php - 如何在javascript中正确使用引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657313/