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

Posted

技术标签:

【中文标题】使用带有textarea文本的jQuery追加时如何处理回车【英文标题】:How to handle a carriage return when using jQuery append with textarea text 【发布时间】:2015-10-27 08:23:59 【问题描述】:

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

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

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

例子:

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

如果:

$text = "Cat

Dog";

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

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

Dog</textarea>" );

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

【问题讨论】:

可能重复:***.com/questions/508269/… @CodeGodie AFAIK htmlentities 不编码换行符,这是 HTML 中的合法字符 您可以将回车编码为 ,尽管这可能会破坏格式。 @MichaelMcPherson 您不能在 textarea 中使用像 &lt;br&gt; 这样的 html 标签,您需要一个 \n 来在那里换行。 你不能吗,@jeroen?嗯。显然不是我的力量。虽然这有一个有趣的可能解决方案:***.com/questions/8627902/new-line-in-text-area 【参考方案1】:

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

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

【讨论】:

有趣的是,这被否决了,它确实有效并且正确的解决方案恕我直言......【参考方案2】:

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

“br”标签在 textarea 内工作,虽然我认为它不会。

【讨论】:

是的。至少在 Chrome 和 Safari 中。【参考方案3】:

你需要做的就是:

PHP:

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

JS:

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

【讨论】:

PHP_EOL 是服务器平台使用的换行符。你不能只假设文本的来源是同一个平台。【参考方案4】:

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

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

Function reference

更新

我拒绝回答@jeroen 的回答。如果您的旧 PHP 版本不支持 json_encode,您可以使用 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;

【讨论】:

以上是关于使用带有textarea文本的jQuery追加时如何处理回车的主要内容,如果未能解决你的问题,请参考以下文章

将textarea的文本复制到带有换行符的div中

jquery从textarea中获取随机单词

jQuery Cleditor 在 keyup 上获取 textarea 值

使用jquery mobile时如何处理手机中的表单导航后退按钮

如何使用 jquery 在 textarea tinymce 中插入文本内联文本?

jquery 获取textarea文本值详解