我有一个带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:无效或意外的令牌
答案 0 :(得分:3)
如果您希望您的字符串是有效的javascript字符串,您可以在javascript代码中使用(在您的示例中 - 将字符串传递给<key>UIApplicationShortcutWidget</key>
<string>nil</string>
函数),您应该:
所以你可以:
selected_comp
str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']);
在您的代码中:
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;但'
也被转义。