仅将非ASCII字符编码为HTML实体,并保留HTML标记

时间:2012-06-18 21:23:30

标签: html ruby character-encoding html-entities

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

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

我想要的输出是

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

如果我使用像HTMLEntities这样的HTML实体编码器,它会对所有内容进行编码,包括标记括号(<>)。这是使用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;."

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

1 个答案:

答案 0 :(得分:0)

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

# encoding: UTF-8

在Ruby文件的顶部。