使用带有textarea文本的jQuery追加时如何处理回车

时间:2015-08-04 19:25:36

标签: javascript php jquery html append

我的文字来自textarea,用户可能会有合法的回车。

如果文本有一个我想保留的回车符,我该如何使用这个精确的jQuery追加示例。

我正在生成这个html代码,如果变量$ text中有回车符,它就会中断。

示例:

$(".inner").append( "<textarea><?php echo $text; ?></textarea>" );

所以如果:

$text = "Cat

Dog";

然后我得到了这个并导致错误。

$( ".inner" ).append( "<textarea>Cat

Dog</textarea>" );

当append创建这个textarea html时,我该怎么做才能保留回车?

4 个答案:

答案 0 :(得分:1)

您需要确保将php值正确传递给javascript。最好的方法是将其编码为json。然后,您可以使用例如.val()来设置元素的值:

var myText = <?php echo json_encode($text); ?>;
$( ".inner" ).append( $('<textarea>').val(myText) );

答案 1 :(得分:0)

使用addcslashes函数,它允许将回车符编码为\n(与javascript兼容)。

$(".inner").append( "<textarea><?php echo addcslashes($text,"\r\n"); ?></textarea>" );

Function reference

<强>更新

我拒绝回答@jeroen的回答。如果你有一个不支持json_encode的旧PHP版本,你可以使用Chengings' function

function escape_javascript_string($str){
    // if php supports json_encode, use it (support utf-8)
    if (function_exists('json_encode')) {
        return json_encode($str);
    }
    // php 5.1 or lower not support json_encode, so use str_replace and addcslashes
    // remove carriage return
    $str = str_replace("\r", '', (string) $str);
    // escape all characters with ASCII code between 0 and 31
    $str = addcslashes($str, "\0..\37'\\");
    // escape double quotes
    $str = str_replace('"', '\"', $str);
    // replace \n with double quotes
    $str = str_replace("\n", '\n', $str); 
    return $str;
}

答案 2 :(得分:0)

您需要做的就是:

<强> PHP:

$cleaned = str_replace("\r\n", "\\n", $text);

<强> JS:

$(".inner").append("<textarea><?= $cleaned ?></textarea>");

答案 3 :(得分:0)

这个来自php.net文档的例子现在正在为我工​​作。 来自Replace carriage return in an email

// Order of replacement
$order   = array("\r\n", "\n", "\r");
$replace = '<br />';

// Processes \r\n's first so they aren't converted twice.
$newstr = str_replace($order, $replace, $text);

&#34; br&#34;标签在textarea内部工作,虽然我不会。