在我们的内部CRM中,我们有一个简单的html输入textarea,您可以在其中留下注释和消息。我们稍后使用此信息通过电子邮件发送此信息,因为该电子邮件是HTML格式,因此格式化完全错误。
因此,例如,如果我在MYSQL表中有以下内容:
This is a test message!
Some line
Some more lines
如果我们稍后通过电子邮件发送,则会显示为:
This is a test message! Some line Some more lines
这显然不是必需的,但我不想在我们的CRM中添加一些复杂的WYSIWYG编辑器。我可以允许换行吗?如果是这样,怎么样?
我不想使用<pre></pre>
代码,因为我认为所有电子邮件客户端都不支持它(我可能错了)。
答案 0 :(得分:2)
如果您不打算在邮件中使用任何HTML标记,则可以使用text/plain
标头。 (这意味着没有颜色,没有链接,也没有文字格式。)
您还可以制作快速而肮脏的解决方案,将文字中的所有\n
替换为<br>\n
。
答案 1 :(得分:2)
问题是html将所有空格渲染为单个空格。如果您在收到电子邮件后查看电子邮件的来源,我会打赌换行符会在那里(如果不是,则问题出在电子邮件生成方面)。
我认为, <pre></pre>
是你能做的最简单的事情。
答案 2 :(得分:1)
基本解决方案是用<br>
替换新行。
更聪明的人会特别考虑多个换行符(例如将/\n\s*\n/
视为结束段落并开始新段落(</p><p>
))。
具体细节取决于您用于从MySQL数据生成电子邮件的语言。您可能想要考虑Markdown解析器之类的东西。
答案 3 :(得分:0)
您可以发送两种形式的电子邮件:html和纯文本。在Html中,不处理换行符(就像在浏览器中一样)。看起来这就是你在这里做的事情。
两种解决方案:要么以纯文本形式发送电子邮件,要么将换行符更改为&lt; br&gt;。
答案 4 :(得分:0)
假设PHP处于混合状态,那么就是nl2br()函数。否则,自己动手并不难。
这个问题的根源在于浏览器(邮件客户端可以使用嵌入式浏览器进行渲染 - 例如Outlook - 或者像浏览器一样)将在HTML中标记之外占用任何数量的空白/新行/回车/等并将它们渲染为单个空格。这样你可以做一些事情,例如缩进你的标记,并使它在浏览器中看起来很清晰。
您必须插入标记才能按照建议控制渲染:将换行符转换为<br>
或<p>
标记等等,就像cms WYSIWYG编辑器那样。或者为您的电子邮件选择不同的格式。