0

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

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

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

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

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

我制定了一个可行的解决方案,如下所示:

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

湾。使用 XMLHttpRequest/ActiveXObject 发送 JavaScript AJAX 发布请求。为此,我必须对数据进行“编码 URIComponent()”。

C。在服务器上接收发布数据并使用“utf8_decode()”,因为“encodeURIComponent()”将特殊字符编码为 UTF-8。

我想要一个 JavaScript 解决方案,它可以确保我从服务器端的 POST 接收到正确的 ISO-8859-1 编码数据,这样我就不必执行“utf8_decode()”。换句话说,我希望 JavaScript 解决方案能够准确地复制带有 accept-charset="ISO-8859-1" 的表单行为。

谢谢

4

1 回答 1

0

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

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

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

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

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

于 2013-04-23T14:49:13.793 回答