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

How to handle a carriage return when using jQuery append with textarea text

本文关键字:回车 textarea 追加 文本 jQuery 何处理 处理      更新时间:2023-09-26

我有来自文本区域的文本,其中用户可能有合法的回车

如果文本中有一个我想保留的回车符,我该如何使用这个jQuery追加示例来做到这一点呢?

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

的例子:

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

如果:

$text = "Cat
Dog";

然后我得到这个,它导致一个错误。

$( ".inner" ).append( "<textarea>Cat
Dog</textarea>" );

当append创建这个textarea html时,我能做些什么来保留回车?

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

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

这个来自php.net文档的例子现在对我有用了。From Replace回车符

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

"br"标签在文本区域内工作,尽管我认为它不会。

您所需要做的就是:

PHP:

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

JS:

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

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

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

函数引用

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

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;
}