使用带有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 AFAIKhtmlentities
不编码换行符,这是 HTML 中的合法字符
您可以将回车编码为 ,尽管这可能会破坏格式。
@MichaelMcPherson 您不能在 textarea 中使用像 <br>
这样的 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追加时如何处理回车的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Cleditor 在 keyup 上获取 textarea 值
使用jquery mobile时如何处理手机中的表单导航后退按钮