【问题标题】:User Input, UTF-8 and XML Support用户输入、UTF-8 和 XML 支持
【发布时间】:2013-08-15 15:40:04
【问题描述】:

我有一个创建事件的 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 中并不容易做到。我是新人,所以我希望得到一些反馈。

感谢堆栈!

【问题讨论】:

    标签: ruby-on-rails xml utf-8


    【解决方案1】:

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

    这些记录然后被一个 cron 作业提取并放入一个 xml 文件中 供其他应用程序使用

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

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

    查看this SO question 回复。通过 Ruby 创建 XML。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-05
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        相关资源
        最近更新 更多