2017-03-06 472 views
3

textarea我需要在提交後保留提交的值和格式,但由於某些原因,\ n似乎無法從變量php變量中傳遞。Textarea值不保留換行符

$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>' 

變量從php傳遞給JS。當我附和可變我得到預期的結果:

1\n2\n3 

當變量被分配到textarea的值的結果是:

123 

相反的:

1 
2 
3 

現在,如果我將js更改爲以下內容,每個數字在新行上都會得到預期結果。

$("textarea").val("1\n2\n3"); 

有誰知道爲什麼PHP變量不流通\ n返回到JS?

+0

在PHP backslesh「\」有阻止某事的作用。 – b2ok

回答

1

使用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>' 
+0

感謝大家誰提供的建議解決方案,遺憾的是沒有這些答案在傳遞會話變量時起作用。但是,這給了我一個簡單的黑客的想法,即使它不是很乾淨。我通過json_ecoded會話變量,然後傳遞變量通過'SUBSTR($文本,1,-1)'刪除起始和結束的報價,因此它可以通過JS解析。出於某種原因,JSON.parse不能按預期工作。謝謝。 – nickyb

0

你應該使用這個。

<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>' 
?> 

enter image description here

0

問題是你期待瀏覽器的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>' 

的第二種方式是直接在您的變量聲明中使用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>' 

無論是這兩種方法的應該工作。

+1

由於我使用nl2br在功能的另一部分是可變的,但我不相信textarea的可以解析
標籤,因爲當我曾嘗試它顯示
爲文本。所以,我目前恢復的
標籤後面的\ n與strreplace:'$文字= str_replace函數(「
」,‘\ n’,$文本);' – nickyb

0
$text = '1\n2\n3'; 

改變雙引號標誌:

$text = "1\n2\n3"; 

在PHP雙引號「和單引號'不能解析相等,我們需要用雙引號,像這樣的東西

爲: $文字= 「\ 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>