【问题标题】:Encode only non-ASCII characters to HTML entities, keeping HTML tags仅将非 ASCII 字符编码为 HTML 实体,保留 HTML 标记
【发布时间】:2012-06-20 22:07:38
【问题描述】:

我正在从数据库中提取文本,对其进行处理,然后将其作为纯文本上传到 HTML 电子邮件创建者。电子邮件工具是我公司内部的。它可以采用简单的 HTML 标记,但不能处理非 ASCII 字符。它们将向最终用户显示为¿。作为我正在使用的示例,来自数据库的源文本可能如下所示:

The café was…<br/>“delicious”.

我想要的输出是

The caf&eacute; was&hellip;<br/>&ldquo;delicious&rdquo;.

如果我使用像 HTMLEntities 这样的 HTML 实体编码器,它会编码所有内容,包括标签括号(&lt;&gt;)。这是使用 HTMLEntities 的输出:

The caf&eacute; was&hellip;&lt;br/&gt;&ldquo;delicious&rdquo;.

如果我将以上内容上传到 HTML 电子邮件工具,最终用户会在他们的电子邮件中看到:

The café was…<br/>“delicious”

有没有什么方法可以两全其美,标签被单独留下,但非 ASCII 字符被编码为 HTML 实体?我可以继续使用 HTMLEntities 并使用 gsub;像这样:

coder = HTMLEntities.new
string = "The café was…<br/>“delicious”."
coder.encode(string, :named).gsub(/&lt;/, "<").gsub(/&gt;/, ">")
#=> "The caf&eacute; was&hellip;<br/>&ldquo;delicious&rdquo;."

这对我来说似乎很脆弱。有更好的方法吗?

【问题讨论】:

  • 您在说什么 HTML 电子邮件生成器?您是如何发送这封电子邮件的?
  • 这是我公司内部的电子邮件工具。它需要简单的 html,但显然它不能使用未编码的特殊字符。
  • 我假设这意味着它不在你的控制之下?似乎它没有正确处理 unicode,这对于今天来说是相当不幸的。有一些 HTML 编码工具可以将字符白名单允许通过,但我不记得它们的名称(或者它们是否在 Ruby 中)。不过,它们就在那里。
  • 顺便说一句,“这些类型的字符”只是任何非 ASCII 字符。 Unicode 是首选的字符编码,因为它几乎可以表示每个字符,而 ASCII 则非常有限。

标签: html ruby character-encoding html-entities


【解决方案1】:

您能否尝试检查数据的编码!
确保您的数据库以 UTF-8 格式保存数据,并添加:

# encoding: UTF-8

在 Ruby 文件的顶部。

【讨论】:

  • 是的,我已经检查过了。编码有问题的不是 Ruby。这是我将文本上传到的电子邮件程序。它需要对特殊字符进行正确编码,然后才能显示给最终用户。
  • @BrunnoDosSantos 这就是他说他在问题中使用的......
猜你喜欢
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多