首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails中不使用断线的文本

问在Rails中不使用断线的文本
EN

Stack Overflow用户
提问于 2020-01-20 13:26:10
回答 2查看 821关注 0票数 4

我有一个AngularJs + Rails。

我有一个带有文本字段的表单,用户可以用断线写出任何文本。当用户提交表单时,存储在db中并通过电子邮件发送给其他用户的消息。发送的电子邮件应保持中断行。

关键是消息的格式在生产中工作得很好。然而,它已经停止了在发展方面的工作。显然,我们还没有在代码中进行影响这一点的特定更新,但是我们正在将Rails和mysql迁移到一个正在开发的更新版本。因此,我想知道这是否与此有关,然而,我无法确切地看到问题出在哪里。

请举例说明这两种不同的行为:

我们将在两个环境中发送相同的示例消息,因此在我们的textarea中我们编写:

代码语言:javascript
复制
This is a test message

with a some break lines.

Lorem ipsum whatever.

这是发送到我的mysql数据库中的varchar字段中存储的文本消息:This is a test message\n\nwith a some break lines.\n\nLorem ipsum whatever.

这是我可以看到存储在开发和生产数据库中的文本:This is a test message with a some break lines. Lorem ipsum whatever.

这是用于在开发和生产中发送电子邮件的模板(此处没有更改):<p class="p1" style="white-space: pre-wrap;"><%= @offer.message_pre_offer %></p>

这是我在开发中通过电子邮件发送消息时看到的日志:

代码语言:javascript
复制
<p class=3D"p1" style=3D"white-space: pre-wrap; margin: 1em 0; padding: 0=
; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; color: #606=
060; font-family: Source Sans Pro, Helvetica Neue, Helvetica, Arial, sans=
-serif; font-size: 15px; line-height: 150%; font-weight: 300;" align=3D"l=
eft">This is a test message=0D
=0D
with a some break lines.=0D
=0D
Lorem ipsum whatever.</p>=0D
<style>=0D

不幸的是,我无法在生产中看到这个详细的日志,因为调试级别没有设置为debug。

当我在webmail中打开测试用户在gmail中获得的电子邮件时,我可以在Chrome的dev tools中看到以下代码:

发展工作不对:

代码语言:javascript
复制
<p style="white-space:pre-wrap;margin:1em 0;padding:0;color:#606060;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;line-height:150%;font-weight:300" align="left">This is a test message



with a some break lines.



Lorem ipsum whatever.</p>

这就是它在gmail网络邮件中的样子:

​

生产运转良好:

代码语言:javascript
复制
<p style="color:#606060;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;font-weight:300;line-height:150%;margin:1em 0;padding:0;text-align:left;white-space: pre-line;" align="left">This is a test message

with a some break lines.

Lorem ipsum whatever.</p>

这就是它在生产中的样子:

​

也许这根本没有关系,买我的rails版本是:

8.0.18

  • Production:

  • 开发: Rails 5.2.4,mysql

  • Rails 4.4.0,mysql 14.14

  • 5.5.40,用于debian gnu (x86_64),使用readline 6.3
EN

回答 2

Stack Overflow用户

发布于 2020-01-23 07:14:12

这很可能解释额外的垂直间距:

窗口使用CR作为换行符。

Unix系统使用LF。

Macintosh使用CR。

当您在期望不同形式的系统上显示一种断行形式时,可能会出现混乱。

也许“正确”的设计只使用LF,然后根据需要根据目标机器进行更改或扩展。请注意,<br>是与HTML等效的,其中CR和LF只是“空白”。

还请参阅<pre>和PHP的NL2BR()以及可能的其他内容。

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 09:18:43

您使用什么模板引擎来生成电子邮件,并进行CSS的内联?

我怀疑这与这里的问题有关,因为用于开发和生产的style输出与您提供的示例不同。

特别是,开发有white-space: pre-wrap,生产有white-space: pre-line。这一点很重要,因为pre-line会将多个换行符压缩成一个换行符,而pre-wrap将保留所有换行符。

这有望解释为什么您在生产和开发中看到不同的行为,但您可能希望保留用户输入的所有空白。在这种情况下,您可以通过将实例\r和\r\n替换为\n来确保一致的间隔。

例如user_input.gsub(/\r\n?/, "\n")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59824289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档