javascript - 将 PHP 变量传递给带有特殊字符的 JavaScript

标签 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 它在大多数情况下都可以工作,但是每当这个 ' 字符出现在注释中时它就不起作用。我如何确定无论里面有什么字符,这都会被视为纯文本。

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

最佳答案

从你的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被替换为“无”,但也 '已逃脱。

关于javascript - 将 PHP 变量传递给带有特殊字符的 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811858/

相关文章:

JAVASCRIPT 检查 iframe 是否加载失败

javascript - 与 jQuery ajax post 方法相比,fetch 方法未按预期发布

javascript - 我如何使用此 JavaScript 返回带有特定哈希标签的推文?

php - 您如何看待返回选择对象而不是语句结果?

php - 下拉列表在 php 中保留先前选择的值

javascript - 将 dataURI 图像从 JavaScript 解析为 PHP

jquery - .slideUp 仅适用于移动设备

javascript - 如果react-router-dom不匹配任何路由,则页面重新加载

javascript - Onclick 正在工作,但 Onchange 不工作 - javascript

javascript - 使用 jquery 获取下拉列表的 json 数据不起作用