在 HTML 中安全地插入换行符

Posted

技术标签:

【中文标题】在 HTML 中安全地插入换行符【英文标题】:Safely insert line breaks into HTML 【发布时间】:2011-04-28 15:25:15 【问题描述】:

我有一个应用程序允许用户将粘贴 html 复制到表单中。此 html 以电子邮件的形式发送,email server will not allow more than 1000 characters per line.所以,我想在用户点击提交后在 html 中插入换行符(\r\n)。如何在不更改内容的情况下做到这一点?

我的想法是这样的:

html.replace('<', '\r\n<');

但这是否保证不会改变结果?属性中不允许使用“

编辑:我实际上认为这是行不通的,因为 html 可能有一个带有 if(x

【问题讨论】:

html源代码是你控制的吗 是的,从技术上讲。然而,我们必须做一些后期处理,包括将 html 粘贴到 div 的 innerHTML 中,这完全弄乱了换行格式。 您不应将任何脚本作为 HTML 电子邮件的一部分发送。你应该删除它。这实际上是我软件中的一个选项。 【参考方案1】:

如果您对内容进行 Base64 编码,那么您可以将内容分解为您想要的任意多行。

【讨论】:

因此,我们的想法是发送他们刚刚打开的 html 电子邮件。如果我对它进行base64编码,那仍然可以工作,还是内容将成为附件?是否所有电子邮件服务器都会自动知道 base64 编码/解码? 我假设您将表单提交发送回服务器,该服务器具有每行 1000 个字符的限制。很抱歉造成误解。如果您仍在将表单提交发送回服务器,则可以解析标记然后漂亮地打印它。如果您直接从表单发送(您可以这样做吗?)那么也许您可以使用 jQuery 解析标记并重新格式化它——不过我不确定这是否可能。【参考方案2】:

电子邮件MIME 标准使用transfer encoding 技术来解决这个问题。理想情况下,您会使用一个为您处理此问题的邮件库,因此您可以插入任意长度的行。

使用 C# 中的 System.Net.Mail.MailMessage 类,您应该能够构造一条普通消息,它会为您传输编码。如果这不起作用,您还可以使用单个 System.Net.Mail.AlternativeView 构造一个多部分消息并显式设置传输编码。

这是我目前正在使用的示例(注意它有一个字符编码错误,因此您的正文必须是 unicode 字符串):

private void Send(string body, bool isHtml, string subject, string recipientAddress, string recipientName, string fromAddress)

    using (var message = new MailMessage(new MailAddress(fromAddress),
                                    new MailAddress(recipientAddress, recipientName)))
    
        message.Subject = subject;
        var alternateView = AlternateView.CreateAlternateViewFromString(body, message.BodyEncoding,
                                                                        isHtml ? "text/html" : "text/plain");
        alternateView.TransferEncoding = TransferEncoding.QuotedPrintable;
        message.AlternateViews.Add(alternateView);

        var client = new SmtpClient();

        client.Send(message);
    

【讨论】:

我希望我们能做到这一点。不幸的是,我们的软件被部署到客户的服务器上并连接到他们的电子邮件服务器,我们无法控制。 等等,我可以将它作为字符串返回,而不是发送此消息吗? 您可以在 web.config 文件中配置 SMTP 设置以使用凭据指向任何邮件服务器。【参考方案3】:

您将进入dangerous territory 尝试使用替换功能解析 HTML。最简单的方法是在表单上显示一个警告框,告诉用户行不能超过 1000 个字符,如果他们尝试提交超过该长度的行的内容,则会返回错误消息。

否则,您可以在 X 个字符后插入换行符,并插入一些特殊标记(如 或类似的),通知接收者插入自动换行符的电子邮件。

【讨论】:

哈哈我以为我之前看到过关于解析html的答案。不幸的是,我们必须对用户输入的 HTML 进行一些后期处理,将 html 插入到 div 的 innerHTML 中。 innerHTML 喜欢使用自己的换行设置来格式化 html。【参考方案4】:

在您认为应该有的地方添加正常的换行符。例如:

在我的脑海中,找到所有 &lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;br&gt;&lt;div&gt; 标签,并在它们之前添加一个 \r\n

完成后,再循环一遍所有行。如果仍有 1000 多个字符长,我会在空白处插入一个 \r\n

此外,您应该从 HTML 电子邮件正文中删除所有脚本标签。拥有脚本标签会导致所有类型的问题(标记为垃圾邮件、标记为病毒、被阻止等)。

【讨论】:

【参考方案5】:

我不确定您是如何发送电子邮件的...如果将其交给 php 脚本,然后将其发送到邮件服务器或使用 mail() 方法,那么此链接可能会有所帮助。

http://php.net/manual/en/function.wordwrap.php

如果不是,你能澄清一下你的问题吗?

另一个简单的想法是,您可以使用: html.replace('','\r\n'); 要么: html.replace('',''+String.fromCharCode(13));//插入回车

但是,由于理想情况下会在浏览器中解析,因此插入“\r\n”可能无效,实际上可能只是显示为“\r\n”......

希望这些对您有所帮助。

【讨论】:

以上是关于在 HTML 中安全地插入换行符的主要内容,如果未能解决你的问题,请参考以下文章

TextBox 或 Html 区域中的换行符

在 HTML 中,是不是可以插入自动换行提示?

如何在闪亮的背景中方便地添加多个换行符?

HTML 在 textarea 中显示换行符

安全工具自动化CRLF漏洞检测工具

HTML JavaScript中换行符问题