【问题标题】:jquery and textareajquery 和 textarea
【发布时间】:2010-10-14 11:38:59
【问题描述】:

我有这个 jQuery 代码:

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

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

unterminated string literal

我收到此文本的错误:

First line...
Second line ...

【问题讨论】:

  • 这是在浏览器上运行的实际 JavaScript 代码吗?还是一些 PHP 源代码?
  • 你是用php设置$text_user的值吗?
  • @Anzeo - 它 is PHP .$text_user. 将字符串与 PHP 变量连接起来,这不是渲染版本。
  • @lolalola,我刚刚为您重新标记了这个问题。不管怎样,以后尝试发布真实代码。问题通常在于使用的确切语法。
  • @Álvaro - 他发布的是真实代码,我不明白这里的混乱吗?

标签: php jquery textarea


【解决方案1】:

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

// 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>

【讨论】:

  • .html() 获取元素的 inner HTML,因此不会产生相同的效果。
  • @Nick Craver,我刚刚修复了 JavaScript 部分。它现在应该可以按预期工作了。
【解决方案2】:

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

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

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

【讨论】:

  • OP 发布的内容 PHP,而您发布的内容与未终止的字符串文字完全相同。
  • @nick:谢谢,他不应该只转义 "\n" 以及引号。我认为他的代码不能作为 javascript 或 PHP 工作,并且问题被标记为 jequery/textarea。
【解决方案3】:

字符串中间不能有换行符,要么需要:

$("#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>');

【讨论】:

  • 但是如何转义 php 字符串中的所有新行?
  • @lolalola - 像这样:$("#text_a").html('&lt;textarea name = "text"&gt;".json_encode($text_user)."&lt;/textarea&gt;'); 有关详细信息,请参阅此问题:stackoverflow.com/questions/168214/…
猜你喜欢
  • 2012-04-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多