在javascript中的字符串变量的“'”之前添加'\'

时间:2012-08-16 14:29:18

标签: php javascript

我有一个javascript变量,它保存从其他地方获取的值(比如从API调用中获取),下面给出了字符串,

He's the reason for this

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

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

但它不起作用?

3 个答案:

答案 0 :(得分:1)

  

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

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

  

在我的test.php中,我使用$detail = $_GET["detail"];echo $detail;进行打印。

如果要将其打印到HTML中,请使用htmlspecialchars使其安全。

如果要将其打印到JavaScript中,请使用json_encode使其安全。

答案 1 :(得分: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("\\'");

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

答案 2 :(得分: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); ?>;

但是,如果没有实际的代码细节,就无法进一步帮助您。