【发布时间】:2012-06-20 22:07:38
【问题描述】:
我正在从数据库中提取文本,对其进行处理,然后将其作为纯文本上传到 HTML 电子邮件创建者。电子邮件工具是我公司内部的。它可以采用简单的 HTML 标记,但不能处理非 ASCII 字符。它们将向最终用户显示为¿。作为我正在使用的示例,来自数据库的源文本可能如下所示:
The café was…<br/>“delicious”.
我想要的输出是
The café was…<br/>“delicious”.
如果我使用像 HTMLEntities 这样的 HTML 实体编码器,它会编码所有内容,包括标签括号(< 和 >)。这是使用 HTMLEntities 的输出:
The café was…<br/>“delicious”.
如果我将以上内容上传到 HTML 电子邮件工具,最终用户会在他们的电子邮件中看到:
The café was…<br/>“delicious”
有没有什么方法可以两全其美,标签被单独留下,但非 ASCII 字符被编码为 HTML 实体?我可以继续使用 HTMLEntities 并使用 gsub;像这样:
coder = HTMLEntities.new
string = "The café was…<br/>“delicious”."
coder.encode(string, :named).gsub(/</, "<").gsub(/>/, ">")
#=> "The café was…<br/>“delicious”."
这对我来说似乎很脆弱。有更好的方法吗?
【问题讨论】:
-
您在说什么 HTML 电子邮件生成器?您是如何发送这封电子邮件的?
-
这是我公司内部的电子邮件工具。它需要简单的 html,但显然它不能使用未编码的特殊字符。
-
我假设这意味着它不在你的控制之下?似乎它没有正确处理 unicode,这对于今天来说是相当不幸的。有一些 HTML 编码工具可以将字符白名单允许通过,但我不记得它们的名称(或者它们是否在 Ruby 中)。不过,它们就在那里。
-
顺便说一句,“这些类型的字符”只是任何非 ASCII 字符。 Unicode 是首选的字符编码,因为它几乎可以表示每个字符,而 ASCII 则非常有限。
标签: html ruby character-encoding html-entities