我有一个javascript变量,它保存从其他地方获取的值(比如从API调用中获取),下面给出了字符串,
He's the reason for this
我将此字符串分配给变量名称'sample'。但是当我打印它时,它不起作用,因为字符串具有“'”字符。我想在“'”字符前添加“\”。我试过用这个,
var sample = (get the string from a api call).replace(/'/g,"\\\'");
但它不起作用?
答案 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); ?>;
但是,如果没有实际的代码细节,就无法进一步帮助您。