引号内的javascript引号,字符串文字问题

sam*_*mJL 4 javascript php string

我试图在javascript工具提示中显示文本

即使以下情况,我仍然会得到未终止的字符串文字:a)引号被削减,b)没有换行符

我试图显示的文字是:

"No, we can't. This is going to be terrible."
Run Code Online (Sandbox Code Playgroud)

(它来自个人的报价,我希望这些报价显示在工具提示中)

我的工具提示功能就像这样

onMouseOver="Tip('string here')"
Run Code Online (Sandbox Code Playgroud)

我通过我的函数运行字符串来清理javascript

function jschars($str) {
        echo preg_replace("/\r?\n/", "\\n", addslashes($str));
}
Run Code Online (Sandbox Code Playgroud)

它在HTML中看起来像这样:

onMouseOver="Tip('\"No, we can\'t. This is going to be terrible.\"')"
Run Code Online (Sandbox Code Playgroud)

这给了我错误的未终止字符串文字为第一个\在提示('\

我猜它是因为我试图将引号直接放在单引号内,我怎样才能解决这个问题呢?(我尝试过htmlspecial chars,例如替换"with" - 我仍然得到错误

Lee*_*Lee 12

这是因为你在XML(或html)元素的值中加入了双引号:

<div onMouseOver="Tip('\".......
Run Code Online (Sandbox Code Playgroud)

反斜杠不会从xml/html的上下文中逃脱它.从技术上讲,你需要对字符串进行实体编码(在javascript-escape之后).像这样的东西:

<div onMouseOver="Tip('\&quot;No, we can\'t. This is going to be terrible.\&quot;')" >
Run Code Online (Sandbox Code Playgroud)

各种浏览器可能会或可能不会正确处理.一个更好的方式来处理这将是给元素的ID(或一类,或者一些其他的方法可以让你选择它),然后在处理从一个独立的脚本中添加鼠标.