在我的 Web 应用程序(JSP、JQuery...)中,有一个表单与其他字段一起有一个文本区域,用户可以在其中自由输入注释。该值按原样保存到数据库中。
当值有换行符并且被加载回文本区域时,就会出现问题;它有时“破坏”Jquery 代码。进一步解释:
使用 Jquery 将值加载到文本区域:
$('#p_notas').text("value_from_db");
当用户按 Enter 键插入新段落时,结果值将包含一个换行符(或多个字符)。这个字符就是问题所在,因为它因浏览器而异,我还没有找到是哪个字符导致了问题。
我得到的错误是控制台错误:SyntaxError:未终止的字符串文字。页面无法正确加载。
我无法重现该问题。我尝试使用 Chrome、Firefox 和 IE Edge(使用用户代理和文档模式的多种组合)。 我们建议用户使用 IE8+、Firefox 或 Chrome,但我们无法控制。
我想知道是哪个 Angular 色导致了问题以及如何解决它。
谢谢
编辑:总结 - 不同浏览器的换行符有什么区别?我可以做些什么来使它们统一吗?
编辑2:查看调试器中的页面,我得到的是: 案例1(没问题)
$('#p_notas').text("This is the text I inserted \r\n More text");
案例 2(问题)
$('#p_notas').text("This is the text I inserted
More text");
在情况 2 中,我收到 Javascript 错误“SyntaxError:未终止的字符串文字。”因为它被解释为两行代码
编辑 3:@m02ph3u5 我尝试使用 '\r' '\n' '\r\n' '\n\r' 但无法重现该问题。
编辑4:我将尝试用“\n\r”替换所有换行符
编辑5:如果感兴趣,我所做的是在保存之前处理该值
value.replace(/(?:\r\n|\r(?=\n)|\n(?=\r))/g, '\n\r')
最佳答案
问题不在于浏览器,而在于操作系统。引用自this post :
So, using \r\n will ensure linebreaks on all major operating systems without issue.
这是一个nice read on the why :为什么操作系统以不同的方式实现换行符?
您可能遇到的问题是保存文本区域的值,然后返回该值(包括任何换行符)。您可以做的是在保存之前“标准化”该值,这样您就不必更改输出。换句话说:从文本区域获取值,执行查找和替换,并将每个可能出现的换行符 (\r,\n) 替换为适用于所有操作系统的\r\n 的值。然后,当您稍后从数据库获取值时,它总是正确的。
关于javascript - 跨浏览器 - 文本区域中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656219/