动态地将反斜杠添加到字符串行的末尾

时间:2014-11-30 03:41:28

标签: javascript php html

我有代码从数据库中获取一些文本并将其插入javascript var内。这是代码:

<script>
var = <?php echo $var ?>
</script>

加载页面后,var如下所示:

<script>
var = "This is first line
This is second
This is third..."
</script>

有没有办法在每一行之后动态添加反斜杠?

编辑:

我使用PHP来回复文字,我想在javascript

内操纵它

2 个答案:

答案 0 :(得分:2)

如何逃避某些事情取决于您使用它的上下文。

如果您不希望在HTML输出中直接包含换行符,则必须将它们编码为&#39; \ n&#39;。但是如果换行符前面有换行符,例如:

\<newline>

然后你也必须逃避反斜杠。否则,只转义换行符实际上只是逃避反斜杠:

\\<newline>

所以要反斜杠换行,你必须首先反斜杠反斜杠然后反斜杠换行:

\\\<newline>

我们还必须注意XSS(跨站点脚本)尝试。如果有人在您的字符串中插入</script>,那么他们可能会过早地结束您的脚本块(即使它在JS引用中!)并更改页面的行为。为了防止这种情况,我们反斜杠正斜杠,以便它不会被读作HTML解析器的文字</script>。 (见下文。)

对此类事情最有用的三个PHP函数是addslasheshtmlspecialcharsstr_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>

enter image description here

一对夫妇注意到:

  • 您必须拥有变量名称,而不仅仅是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>