使用特殊字符将PHP变量传递给JavaScript

时间:2016-10-01 22:01:14

标签: javascript php jquery

我有一个带onclick功能的按钮,我将几个php变量发送到我的javascript函数。这一切都很好,除非我有一个'在文中。

所以我会有一个按钮

<button onclick=\"selected_comp('" . preg_replace("/\r|\n/", "", $comp_row['comments']) . "')\"

然后我会有一个功能

function selected_comp(comments){
console.log(comments);
}

我已经尝试了preg_replace和json_encode,但两者都给了我错误(json_encode一般给我错误,并且preg_replace大部分时间都有效,但只要这个&#39;字符在评论中,它就不起作用。我怎样才能确保将其视为纯文本,无论内在角色是什么。

  

错误:(索引):1未捕获的SyntaxError:无效或意外的令牌

2 个答案:

答案 0 :(得分:3)

如果您希望您的字符串是有效的javascript字符串,您可以在javascript代码中使用(在您的示例中 - 将字符串传递给<key>UIApplicationShortcutWidget</key> <string>nil</string> 函数),您应该:

  1. 确保您的字符串中没有换行符。
  2. 请确保您的字符串中没有引号(请注意,这取决于您在代码中使用的引号 - 单/双)。
  3. 所以你可以:

    1. selected_comp
    2. str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']);
    3. 在您的代码中:

      str_replace("'", "\\'", $comp_row['comments']);

      我使用<button onclick=\"selected_comp('". str_replace("'", "\\'", str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']) ) . "')\" ,因为您在原始函数中使用了它。

答案 1 :(得分:3)

从编写PHP代码的方式来看,如果$comp_row['comments']中的文本是text,那么生成的JS代码将是

<button onclick="selected_comp('text')">

(为了清楚起见,我添加了<>

现在,如果文字为text with ' embedded,则会生成

<button onclick="selected_comp('text with ' embedded')">

然后你清楚地看到它为什么会引发错误。

有很多不同的解决方案可以避免它,就像@Terminus建议的那样 但是,如果不深入更改PHP脚本结构,可能不容易应用。

所以这里有一个建议,可能看起来有点奇怪但继续使用您当前的代码组织:

button onclick=\"selected_comp('" . 
str_replace(["\r", "\n", "'"], ["", "", "\\'"], $comp_row['comments']) . 
"')\"

首先,您可以注意到我已从preg_replace()更改为str_replace()(无论如何preg_replace()已经过度杀戮)。

现在的重点是,不仅\r\n被&#34取代,没有&#34;但'也被转义。