我有代码从数据库中获取一些文本并将其插入javascript var
内。这是代码:
<script>
var = <?php echo $var ?>
</script>
加载页面后,var
如下所示:
<script>
var = "This is first line
This is second
This is third..."
</script>
有没有办法在每一行之后动态添加反斜杠?
编辑:
我使用PHP
来回复文字,我想在javascript
答案 0 :(得分:2)
如何逃避某些事情取决于您使用它的上下文。
如果您不希望在HTML输出中直接包含换行符,则必须将它们编码为&#39; \ n&#39;。但是如果换行符前面有换行符,例如:
\<newline>
然后你也必须逃避反斜杠。否则,只转义换行符实际上只是逃避反斜杠:
\\<newline>
所以要反斜杠换行,你必须首先反斜杠反斜杠然后反斜杠换行:
\\\<newline>
我们还必须注意XSS(跨站点脚本)尝试。如果有人在您的字符串中插入</script>
,那么他们可能会过早地结束您的脚本块(即使它在JS引用中!)并更改页面的行为。为了防止这种情况,我们反斜杠正斜杠,以便它不会被读作HTML解析器的文字</script>
。 (见下文。)
对此类事情最有用的三个PHP函数是addslashes
,htmlspecialchars
和str_replace
。
要转义JS字符串(并转义换行符),可以使用以下函数:
<?php
function escapeForJSString($var) {
return str_replace(
"/" // escape forward slash to help prevent XSS
, "\\/"
, str_replace(
"\n" // escape newline
, "\\n"
, addslashes($var) // escape single quotes, double quotes, backslash, and null byte
)
);
}
?>
在您的代码中:
<?php
$var = "You can find the file at C:\\Program Files\\Cool Program\\Preferences.txt > colorScheme
if you want to change it.</script>";
?>
<script type="text/javascript">
var lines = "<?= escapeForJSString($var) ?>";
alert(lines);
</script>
输出:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<script type="text/javascript">
var lines = "You can find the file at C:\\Program Files\\Cool Program\\Preferences.txt > colorScheme\n if you want to change it.<\/script>";
alert(lines);
</script>
</head>
<body>
</body>
</html>
一对夫妇注意到:
var
。<?php echo $var ?>
或<?= $var ?>
(如果您使用的是PHP 5.4之前的版本,则必须在您的php.ini文件中启用short_open_tag
。)< / LI>
答案 1 :(得分:0)
只需将变量拆分为具有您喜欢的分隔符的新行:
<?php
$var = "This is line 1|##|This is line 2|##|This is line 3";
?>
<script type='text/javascript'>
var lines = "<?=$var?>";
var res = lines.split("|##|");
res.forEach(function(entry) {
alert(entry + "\\");
});
</script>