我有一个 javascript 变量,它保存从其他地方获取的值(假设从 API 调用中获取),获取的字符串如下所示,
He's the reason for this
我将此字符串分配给变量名称“sample”。但是当我打印它时,它不起作用,因为字符串有“'”字符。我想在“'”字符之前添加“\”。我试过用这个,
var sample = (get the string from a api call).replace(/'/g,"\\\'");
但它不起作用?
我有一个 javascript 变量,它保存从其他地方获取的值(假设从 API 调用中获取),获取的字符串如下所示,
He's the reason for this
我将此字符串分配给变量名称“sample”。但是当我打印它时,它不起作用,因为字符串有“'”字符。我想在“'”字符之前添加“\”。我试过用这个,
var sample = (get the string from a api call).replace(/'/g,"\\\'");
但它不起作用?
在我
window.location.href = "test.php?detail="+sample;
用来发送数据的 javascript 文件中。
用于encodeURIComponent
转义字符串以插入 URI。
在我的 test.php 中,我使用
$detail = $_GET["detail"];
andecho $detail;
来打印它。
如果您要将其打印成 HTML,请使用htmlspecialchars
以使其安全。
如果您将其打印到 JavaScript 中,请使用json_encode
以确保其安全。
你过度使用转义字符:
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("\\'");
对于较长的字符串(不是短字符串,因为调用数组构造函数,创建数组对象,循环...),拆分更快
大概问题出在(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); ?>;
但是,如果没有您的实际代码详细信息,就不可能进一步帮助您。