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

时间:2009-10-23 06:02:35

标签: jquery asp.net-mvc encoding character-encoding

我需要在一个UTF-8编码的新网站上发布表格。问题是 - 我需要将它发布到用西欧(iso)编码的遗留站点。某些角色在帖子中搞砸了(就像丹麦特殊字符一样)。

无法更改旧网站上的字符编码,因为它肯定会破坏旧网站上的内容(因此这是不行的)。我可能能够对遗留站点上的数据(输入上的一些分支)做一些魔术,但这将是后备解决方案。

我在客户端上有jquery来帮助处理可能的编码技巧。

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

新网站正在运行asp.net mvc,旧的遗产是经典的asp(不是asp.net),如果这有所不同(我希望它没有,因为我真的想处理客户端的东西)

3 个答案:

答案 0 :(得分:1)

IIUC,旧网站上的网页编码的内容并不重要,因为表格将在新网站上。重要的是编码旧站点的服务器所期望的。如果服务器希望数据以latin-1提交,那么您只有两个选择:

  1. 更改服务器以接受UTF-8中的数据(可能在不同的URL下)
  2. 确保客户端以Latin-1
  3. 提交数据

    由于您排除了选项1,您唯一的选择是选项2(但重新考虑选项1)。对于选项2,您再次有选择,一个是根据您的建议使用代理。但是,如果包含表单的页面以Latin-1编码(尽管站点的其余部分是UTF-8),可能会更好。如果您不想在页面上显示非拉丁语1信息(例如中文文本),这应该可以正常工作。你只需要向asp.net解释这个特定的页面应该用latin-1呈现(并且web服务器应该发送一个合适的Content-type)。

答案 1 :(得分:1)

无论托管页面的编码如何,您都可以控制表单中使用的编码。例如,

  <form accept-charset="latin-1" ... >

答案 2 :(得分:0)

好的,所以我们在将数据提交到着陆页之前最终对数据进行了编码。

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

无论如何,我们把从外部站点提交数据的逻辑放到一个jquery插件中,该插件通过在发布表单之前转义每个值来处理表单中的任何表单元素 - 实际上登陆/旧页面需要数据GET格式,所以我们最终将window.location设置为生成的查询字符串 - 但我想如果我们愿意的话,我们也可以使用普通的POST提交表单。