使用带有ISO-8859-1字符集的Javascript / jQuery复制HTML表单POST

时间:2013-04-23 14:38:52

标签: php javascript forms post character-encoding

我的PHP Web应用程序正在运行ISO-8859-1编码。当我发布一个带有accept-charset =" ISO-8859-1"的HTML表单时到PHP服务器,这是我在服务器端收到的

一个。 ASCII字符的原始形式。

湾可以用原始形式在ISO-8859-1中表示的特殊字符。

℃。无法在ISO-8859-1中表示的特殊字符转换为HTML实体。

所有数据都以正确的ISO-8859-1编码字符形式接收。我想用JavaScript或jQuery复制完全相同的行为。我尝试的所有解决方案最终都将所有特殊字符作为双重编码字符发送到PHP文件,我必须对它们进行utf8_decode。

我已经制定了如下工作解决方案:

一个。将不受支持的特殊字符转换为HTML实体。

湾使用XMLHttpRequest / ActiveXObject发送JavaScript AJAX发布请求。要做到这一点,我必须' encodeURIComponent()'数据。

℃。在服务器和< utf8_decode()'上接收发布数据因为' encodeURIComponent()'将特殊字符编码为UTF-8。

我想要一个JavaScript解决方案,确保我在服务器端从POST接收正确的ISO-8859-1编码数据,这样我就不必去做utf8_decode()' 。换句话说,我希望JavaScript解决方案能够使用accept-charset =" ISO-8859-1"来完全复制表单行为。

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知,javascript中没有确定的方法可以做到这一点。字符编码不是Javascript的强项,我相信这主要是因为它将这些区域留给其他人自行决定,例如描述内容的HTML,进行解析的服务器语言或提供环境的Web服务器。 / p>

就JS中的任何URI编码/解码功能而言,它都是UTF-8并且是内置的,因为没有可以传递的参数来覆盖它。

您还可以尝试覆盖MimeType并指定一个新的MimeType:

var xhr = new XMLHttpRequest();
if (xhr.overrideMimeType) {
    xhr.overrideMimeType('application/x-javascript; charset=ISO-8859-1');
}

不确定它有多稳定,但它是您可能想要探索的一个方向..