Javascript text区域值不保留变量中的换行符

Javascript text区域值不保留变量中的换行符,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我有一个textarea,需要在提交后保留提交的值和格式,但由于某些原因\n似乎无法从变量php传递 $text = '1\n2\n3'; echo '<script> var text = "'.$text.'"; $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val

我有一个textarea,需要在提交后保留提交的值和格式,但由于某些原因\n似乎无法从变量php传递

$text = '1\n2\n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
将变量指定给textarea值时,结果为:

123
而不是:

1
2
3
现在,如果我将js更改为以下内容,则在新行中的每个数字都会得到预期的结果

$("textarea").val("1\n2\n3");
有人知道为什么php变量没有将返回值传递给JS吗?

您应该使用这个

    <script   src="https://code.jquery.com/jquery-3.1.1.min.js"   integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="   crossorigin="anonymous"></script>

<textarea rows="4" cols="50">
</textarea>


<?php

$text = '1\n2\n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
?>


问题是您希望浏览器Javascript理解PHP的“\n”字符。那是行不通的。此外,代码使用单引号表示换行符。PHP要求使用双引号表示换行符特殊字符

至少有两种方法可以解决此问题

第一个是使用PHP的nl2br()函数。在这种情况下,您的代码可以重写为:

$text = "1\n2\n3"; //notice the use of double quotes.

echo '<script>
var text = "'. nl2br($text).'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
$text=“1\n2\n3”//请注意双引号的使用。
回声'
var text=“.nl2br($text)。”;
$(文档).ready(函数(){
$(“textarea”).attr(“占位符”,“1)在新行上开始每个注释…”);
$(“文本区域”).val(文本);
});
'
第二种方法是在变量声明中直接使用HTML
标记。这将避免使用PHP的nl2br()函数

$text = '1<br>n2<br>n3';

echo '<script>
var text = "'.$text.'";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
$text='1
n2
n3'; 回声' var text=“”.$text.”; $(文档).ready(函数(){ $(“textarea”).attr(“占位符”,“1)在新行上开始每个注释…”); $(“文本区域”).val(文本); }); '

这两种方法中的任何一种都应该有效。

使用json编码应该以JS能够理解的方式避免换行

$text = json_encode('1\n2\n3');

echo '<script>
var text = JSON.parse("'.$text.'");
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>'
$text=json_encode('1\n2\n3');
回声'
var text=JSON.parse(“.$text.”);
$(文档).ready(函数(){
$(“textarea”).attr(“占位符”,“1)在新行上开始每个注释…”);
$(“文本区域”).val(文本);
});
'
更改为双引号符号:

$text = "1\n2\n3";
在PHP中,双引号“和单引号”解析不相等。对于某些东西,我们需要使用双引号,如下所示

用于: $text=“\n1\n2\n3\n”

源页面视图将是:

<script>
var text = "
1
2
3
";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>

变量文本=”
1.
2.
3.
";
$(文档).ready(函数(){
$(“textarea”).attr(“占位符”,“1)在新行上开始每个注释…”);
$(“文本区域”).val(文本);
});

谢谢,我确实在函数的另一部分使用了nl2br作为该变量,但我不相信textarea可以解析
标记,因为当我尝试将
显示为文本时,它会显示为文本。因此,我目前正在使用strreplace将
标记还原为\n:
$text=str_replace('
','\n',$text);
在PHP backslesh中\“具有阻止某些内容的角色。感谢所有提供建议解决方案的人,不幸的是,在传递会话变量时,这些答案都不起作用。但这给了我一个简单黑客的想法,即使它不是很干净。我传递了json_ecoded会话变量,然后通过
substr($text,1,-1)
传递该变量,以删除起始和结束引号,以便JS可以对其进行解析。出于某种原因,JSON.parse没有按预期工作。谢谢
$text = "1\n2\n3";
<script>
var text = "
1
2
3
";
$( document ).ready(function() {
    $("textarea").attr("placeholder","1) Start Each Comment On A New Line...");
    $("textarea").val(text);
});

</script>