代码之家  ›  专栏  ›  技术社区  ›  Per Hornshøj-Schierbeck

如何将UTF-8页上的表单数据发布到西欧(ISO)页

  •  0
  • Per Hornshøj-Schierbeck  · 技术社区  · 15 年前

    我需要在一个新网站上发布一个utf-8编码的表单。问题是-我需要将它发布到用西欧(ISO)编码的遗留站点。某些字符会在邮件中出错(如丹麦特殊字符)。

    不可能改变传统网站上的字符编码,因为它会明显地破坏旧网站上的内容(所以这是不可行的)。我可以对遗留站点上的数据(在输入上进行一些分支)进行一些神奇的处理,但这将是回退解决方案。

    我在客户机上使用jquery来帮助实现任何可能的编码技巧。

    我看到了一个可能的解决方案,将新的utf-8页面实际发布到另一个新页面,该页面会更改编码服务器端并将其重新发布到旧站点,但这看起来很难看……

    新站点运行的是ASP.NET MVC,而旧的传统站点是经典的ASP(而不是ASP.NET),如果这有什么区别的话(我希望它不会,因为我真的很想处理客户端的东西)。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Martin v. Löwis    15 年前

    iiuc,旧网站上的网页是用什么编码的并不重要,因为表单将出现在新网站上。重要的是旧站点的服务器需要什么编码。如果服务器希望以拉丁语1提交数据,那么您只有两个选择:

    1. 将服务器更改为接受UTF-8格式的数据(可能位于其他URL下)
    2. 确保客户以拉丁文-1提交数据

    正如您已经排除了选项1,您唯一的选择是选项2(但请重新考虑执行选项1)。对于选项2,您还有其他选择,一个是在您提议时使用代理。但是,如果包含表单的页面是用拉丁文-1编码的(尽管站点的其余部分是UTF-8),可能会更好。如果您不想在页面上显示非拉丁-1信息(如中文文本),这应该可以很好地工作。您只需向ASP.NET解释这个特定的页面应该用拉丁文-1呈现(并且Web服务器应该发送适当的内容类型)。

        2
  •  1
  •   ZZ Coder    15 年前

    您可以控制表单中使用的编码,而不考虑宿主页面的编码。例如,

      <form accept-charset="latin-1" ... >
    
        3
  •  0
  •   Per Hornshøj-Schierbeck    15 年前

    好的,所以我们在将数据提交到登录页之前,结束了对数据的URL编码。

    这解决了其他解决方案存在的两个问题:1)转换值的额外登录/跳转页面;2)不重写大部分旧的遗留(正在迁移)站点以接受UTF-8

    不管怎样,我们把从外部站点向遗留站点提交数据的逻辑放入jquery插件中,jquery插件通过在发布表单之前转义每个值来处理表单中的任何表单元素-实际上,登录/旧页需要get格式的数据,所以我们最终只会将window.location设置为生成的querystring-但我想我们可能会如果我们愿意的话,还可以用普通邮件提交表格。