jquery和textarea

时间:2010-10-14 11:38:59

标签: php jquery textarea

我有这个jQuery代码:

$("#text_a").html('<textarea name = "text">".$text_user."</textarea>'); 

如果我用新行输入textarea文本,我会收到此错误:

unterminated string literal

我收到此错误信息:

First line...
Second line ...

3 个答案:

答案 0 :(得分:2)

假设这实际上是一个PHP问题,我通常使用json_encode()来生成JavaScript字符串。 E.g:

// Prints: var myString = "Hello\nWorld";
var myString = <?php echo json_encode("Hello\nWorld"); ?>;

回到JavaScript,你可能想避免HTML注入和XSS攻击:

var myTextarea = $('<textarea name="text"></textarea>').text(<?php echo json_encode($text_user); ?>);
$("#text_a").html(myTextarea);

附录

一个小测试案例,说明了正确转义的必要性:

<?php

$text_user = '</textarea><a href="http://www.google.com">Google></a><textarea>';

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript"><!--
jQuery(function($){
    // Proper escaping
    var myTextarea = $('<textarea name="text"></textarea>').text(<?php echo json_encode($text_user); ?>);
    $("#text_a").html(myTextarea);

    // HTML injection
    $("#text_b").html('<textarea name="text">' + <?php echo json_encode($text_user); ?> + '</textarea>');
});
//--></script>
</head>
<body>

<div id="text_a"></div>
<div id="text_b"></div>

</body>
</html>

答案 1 :(得分:1)

您正在将PHP与javascript混合使用。可能是这样的:

var text_user = "<?= nl2br(htmlentities($text_user)) ?>";
$("#text_a").html('<textarea name = "text">'+text_user+'</textarea>'); 

ecmascript中的连接运算符是“+”,而不是“。”就像在PHP中一样。

答案 2 :(得分:0)

你不能在字符串中间换行,你需要:

$("#text_a").html('<textarea name="text">First line...\
Second line ...</textarea>'); 

或者在我看来更好,逃避你的新行,就像这样:

$("#text_a").html('<textarea name="text">First line...\nSecond line ...</textarea>'); 

There are a few encoding options,例如:

$("#text_a").html('<textarea name = "text">".json_encode($text_user)."</textarea>');