格式化填充的文本区域、回车符、换行符和 HAML

Posted

技术标签:

【中文标题】格式化填充的文本区域、回车符、换行符和 HAML【英文标题】:Formatting populated textarea, carriage returns, newlines, and HAML 【发布时间】:2011-03-05 13:21:16 【问题描述】:

当我使用 \r\n(回车 - 换行符)用文本填充 textarea 时,文本格式不正确 [更新:\r\n 是在填写 textarea 时生成的,我只是从数据库之前填写的内容。另外需要注意的是,在生产环境中我似乎没有这个问题。 END UPDATE] 例如:

%textarea  
  = "hello\r\nHow are you?"

出来是这样的:

hello  
        How are you?

我认为这可能与 HAML 有关。谁能帮我吗? 注意:如果我使用 \n\r 它工作正常,但这在技术上是不正确的,id 必须做一些 gsubs 来反转它们以正确显示。

【问题讨论】:

textarea 标签中是否有空格/回车符?例如。 <textarea> foo </textarea>. 是的,当我查看源代码时,第一部分和第二部分之间有一堆空格。 通常在字符串中您只需使用"\n" 换行即可。不行吗? \r\n 正是有人用换行符填写文本区域时提交的内容。 【参考方案1】:

因为 Haml 会自动缩进 html 源代码,所以 pre 和 textarea 等对空格敏感的标签的内容可能会搞砸。解决方案是用 HTML 换行实体 
 替换这些标记中的换行符,Haml 使用 Haml::Helpers#preserveHaml::Helpers#find_and_preserve 帮助器来实现。

通常,当您使用需要它的标签时,Haml 会自动为您执行此操作(可以使用 :preserve 选项自定义)。例如,

%p
  %textarea= "Foo\nBar"

将被编译为

<p>
  <textarea>
Foo&#x000A;Bar</textarea>
</p>

但是,如果助手正在生成标签,Haml 无法检测到,因此您必须自己致电 Haml::Helpers#find_and_preserve。您也可以使用~,它与= 相同,只是它在其输入上自动运行find_and_preserve。例如:

%p= find_and_preserve "<textarea>Foo\nBar</textarea>"

相同
%p~ "<textarea>Foo\nBar</textarea>"

并渲染

<p><textarea>Foo&#x000A;Bar</textarea></p>

来源:this Haml FAQ。

【讨论】:

nex3,非常感谢! (我可以拥抱你吗?):D。 .gsub("\n",'&amp;#x000A;').html_safe 你也可以使用 Rails 的 text_area 助手:= find_and_preserve f.text_area :title @thutt 的回答更胜一筹:使用~,这是= find_and_preserve... 的别名,而不是=【参考方案2】:

如果= f.text_area :foo 在每个换行符处显示不需要的空格,请简短回答:

= 替换为~

有关其背后原因的更详细说明,请阅读Natalie's answer 和HAML docs about ~。

【讨论】:

【参考方案3】:

继续@nex3 的回答,如果你想在文本区域内做一些多行内容,试试这样:

%textarea#textarea_id:name => 'area_name'
  :preserve
    Line1
    Line2
    Line3
    Line4
    Line5

【讨论】:

【参考方案4】:

变化

%textarea  
  = "hello\r\nHow are you?"  

%textarea "hello\r\nHow are you?"

一行似乎已经解决了这个问题。我想这意味着这是一个 HAML 问题。

【讨论】:

以上是关于格式化填充的文本区域、回车符、换行符和 HAML的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 Chrome 在我的文本区域中添加额外的换行符?

修改 HTML 的文本区域 - 呈现换行符

带有换行符的文本区域中的数据到数据库

文本区域中的换行符

基于Javascript中的换行符解析子字符串中的文本区域

基于Javascript中的换行符解析子字符串中的文本区域