0

我有一个创建事件的 Rails 应用程序。用户输入他们的事件详细信息,这些详细信息将保存在数据库中。然后这些记录由 cron 作业提取并放入 xml 文件以供另一个应用程序使用。我遇到了非 UTF-8 字符和“&”字符的问题。我有一个使用正则表达式来检测非 UTF-8 字符的验证,但它没有说明允许什么,因为它在用户离开输入字段后验证。有没有人对在多个字段上剥离和替换字符有任何建议?谢谢!

这是我正在使用的验证代码示例:

<%= f.input :description, label: 'Event Description:' %>

validates_format_of :description, :with => /^[\000-\177]*$/, :allow_blank => true, :message => "Please remove all special characters"

这只是我需要验证(整体)并显示哪些字符是不允许的,或者删除并替换坏字符的众多字段之一。我不确定是否有一个 gem 已经这样做了,或者也许有一种简单的方法可以通过 rails 做到这一点(除了编写那些大的验证字符串,它不会向用户显示问题所在的字符)。也许这在 Rails 中并不容易做到。我是新来的,所以我很想得到一些反馈。

谢谢堆栈!

4

2 回答 2

1

您应该使用 XML 库/应用程序来处理以下内容:

然后,这些记录由 cron 作业提取并放入 xml 文件以供另一个应用程序使用

否则,您将不得不处理所有可转义的 XML 实体并处理字符编码等。用户应该能够输入这些字符,并且 XML 创建机制将能够自动转义这些字符。

因此,我认为这是一个验证问题。

看看这个 SO question re。通过 Ruby 创建 XML。

于 2013-08-15T15:42:16.827 回答
0

您看到“非 UTF-8”字符这一事实并不表示您的用户输入了错误数据,而是您错误地处理了输入。如果输入字段接受 CP-1252(或 ISO-8859-1)扩展 ASCII(0x80 和 0xFF 之间的字符),则此时应进行到有效 UTF-8 的转换。

您认为“无效”的每个输入字符实际上仍然有效。它是一个 ISO-8859-1 代码点(位模式),表示该代码页中的特定字形。该字形具有相应的 Unicode 代码点有效的 UTF-8 编码(2 字节序列)。如果您在从用户那里获取输入并在将其放入 XML 之前执行转换,那么问题就会消失,用户可以输入他们想要的任何内容并获得正确的结果。

于 2013-08-15T16:20:57.810 回答