2011-11-21 53 views
1

我试图再次得到它。在变数中处理带换行符的字符串

我有一个JS变种,看起来像这样:

var test; 

现在我写一些JS用PHP:现在

<?php 
    $phpvar = "a text with 
    a linebreak"; 
    echo "<script type='text/javascript'> 
     var test; 
     test = '" . $phpvar . "'; 
    </script>"; 
?> 

,如果我运行它,它输出源,如下所示:

<script type='text/javascript'> 
var test; 
test = 'a text with 
a linebreak'; 
</script> 

这给了我一个JS例外:

ERROR: unterminated string literal 

不知何故,JS似乎没有认识到在多行上有一个字符串。

如果最后字符串必须再次换行,我怎么能意识到这一点? (所以,如果全部执行完毕,我必须包括所有的换行字符串)

谢谢你的帮助;)

回答

4

试试这个,如果你在一个Javascript行的末尾使用\,可以在一个字符串中使用多行。

<?php 
    $phpvar = "a text with 
    a linebreak"; 
    echo "<script type='text/javascript'> 
     var test; 
     test = '" . str_replace("\n", "\\\n",$phpvar) . "'; 
    </script>"; 
?> 
+0

也许会替换为'\\\ n',因为需要一个\\ \\和'\ n' –

+0

这太棒了!谢谢:) –

+1

但是,这不会把实际的换行符放入JS字符串中,它只会让字符串文字突破几行。如果意图是让字符串包含换行符,用'\\ n'替换'\ n',这样当浏览器看到它是一个反斜杠字符后加一个'n'。 – nnnnnn

1

逃脱在PHP中:

js:   php: 
<linebreak> \n 
\    \\ 
\n   \\n 

如果你想这样的:

var test = "te\ 
st"; 
console.log(test) > "test" 
在这种情况下

你需要使用一个\<linebreak>(在JS),所以你需要将\n更换为\\\n(in php)

<?php 
    $phpvar = "a text with 
    a linebreak"; 
    echo "<script type='text/javascript'> 
     var test; 
     test = '" . str_replace("\n", "\\\n",$phpvar) . "'; 
    </script>"; 
?> 

此保持换行符作为一个PHP而不是在javasccript


但是,如果你想保留的换行符在JavaScript这样的:

console.log(test) > "te 
        st" 

您需要添加一个\n作为一个转义字符串,而不是一个换行符。 因此,代码会看起来像这样

var test = "te\n\ 
st" 
console.log(test) > "te 
        st" 

在这种情况下,你需要一个\n\<linebeak>(在JS),所以你需要更换的\n\\n\\\n

<?php 
    $phpvar = "a text with 
    a linebreak"; 
    echo "<script type='text/javascript'> 
     var test; 
     test = '" . str_replace("\n", "\\n\\\n",$phpvar) . "'; 
    </script>"; 
?> 

这保持在PHP的换行符,也可以增加内分行的JavaScript