0

我有一个 javascript 变量,它保存从其他地方获取的值(假设从 API 调用中获取),获取的字符串如下所示,

He's the reason for this

我将此字符串分配给变量名称“sample”。但是当我打印它时,它不起作用,因为字符串有“'”字符。我想在“'”字符之前添加“\”。我试过用这个,

var sample = (get the string from a api call).replace(/'/g,"\\\'");

但它不起作用?

4

3 回答 3

1

在我window.location.href = "test.php?detail="+sample;用来发送数据的 javascript 文件中。

用于encodeURIComponent转义字符串以插入 URI。

在我的 test.php 中,我使用$detail = $_GET["detail"];andecho $detail;来打印它。

如果您要将其打印成 HTML,请使用htmlspecialchars以使其安全。

如果您将其打印到 JavaScript 中,请使用json_encode以确保其安全。

于 2012-08-16T14:44:52.157 回答
0

你过度使用转义字符:

var sample = (get the string from a api call).replace(/'/g,"\\'");

就足够了,用双引号分隔的单引号不需要转义,所以只需转义一个反斜杠。
不过,附带说明:如果您要检查的字符串是返回值,则单引号应该不是问题(如果是,api 代码会在返回字符串之前中断)。如果您真的真的很想成为超级超级确定并且字符串很长:

var sample = (get the string from a api call).split('\'').join('\\\'');
//or (to avoid confusion with all that escaping
var sample = (get the string from a api call).split("'").join("\\'");

对于较长的字符串(不是短字符串,因为调用数组构造函数,创建数组对象,循环...),拆分更快

于 2012-08-16T14:41:19.923 回答
0

大概问题出在(get the string from a api call). 如果你有一些像这样的服务器端代码(PHP?):

var sample = <?php echo $mystring ?>.replace(…);

…它产生的输出发送到浏览器,如下所示:

var sample = 'my dad's car'.replace(…);

…那么你的服务器端代码产生了语法上无效的 JavaScript,无法通过更多的 JavaScript 来修复。相反,您需要在服务器上修复它,例如:

var sample = <?php echo json_encode($mystring); ?>;

但是,如果没有您的实际代码详细信息,就不可能进一步帮助您。

于 2012-08-16T14:52:49.010 回答