2016-10-01 161 views
0

我有一个onclick函数按钮,其中我发送了几个php变量到我的javascript函数。这一切都工作正常,除了当我有一个'内的文字。将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它在大多数时间都可以使用,但是只要这个字符在注释里面不起作用,我怎么能确保这只是纯文本,无论字符是在什么内部都可以。

error: (index):1 Uncaught SyntaxError: Invalid or unexpected token

回答

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被替换为“没有”,而且'逃脱。

+0

好的解释... – devpro

3

如果你想你的字符串是有效的JavaScript字符串,你可以在你的JavaScript代码中使用(在你的榜样 - 字符串传递给selected_comp功能),你应该:

  1. 确保你不”你的字符串中没有换行符。
  2. 确保你的字符串里没有引号(注意这取决于你在代码中使用的引号 - 单/双)。

,因此您可以:

  1. str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']);
  2. str_replace("'", "\\'", $comp_row['comments']);

并在代码:

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

我以前',因为您在原始函数中使用它。

+0

很好的解释.. – devpro

+0

非常感谢它的魅力 – Wouter