【问题标题】:Stuck at Jquery Ajax Db Encoding for ISO-8859-9 Charset卡在 ISO-8859-9 字符集的 Jquery Ajax Db 编码
【发布时间】:2012-07-23 07:57:39
【问题描述】:

我正在尝试通过我的 Jquery 应用程序将数据传递给 db。我有严重的编码问题。

当前页面编码为 iso-8859-9。我已将我的 ajax 页面编码为 iso-8859-9 并使用 contentType: "application/x-www-form-urlencoded;charset=ISO-8859-9" 传递 .ajax 数据

每次尝试都会将İZİN 值存储为İZİN

如果我创建一个 PHP 页面并使用 headers 设置编码是否有效?

PS:我正在处理 HTML 页面上的数据。处理器页面是一个 ASP 页面,我猜是使用 MsSQL db。我无权访问处理器页面或数据库。只需通过表单发布输入数据。

İZİN 单词和其他一些类似的单词在 WHERE 子句的其他一些页面上用于 sql 查询。所以我无法将字符转换为 HTML 代码。我必须使用 İ 作为 İ。

感谢您的建议!

【问题讨论】:

  • 您可能正在“使用 contentType: application/x-www-form-urlencoded;charset=ISO-8859-9 传递 ajax 数据”,但您实际上是否确保它被编码为 ISO-8859-9 .尽管在您的内容类型中声明了其他内容,但在我看来,您仍在发送 UTF-8 编码。
  • @AnthonyWJones 我怎么能确定?我在元标头和 ajax 查询中都将其设置为 ISO-8859-9。

标签: php jquery html ajax asp-classic


【解决方案1】:

application/x-www-form-urlencoded 没有字符集。它只是ASCII字符。在那里指定字符集将无济于事。

jQuery 通常会将您的数据 urlencode 为 is specified:

  1. 编码为 UTF-8
  2. 百分比编码

所以:

$.post( "test.php", {data: 'İZİN'}); //Shorthand for $.ajax

实际上将其发布到服务器:

data=%C4%B0Z%C4%B0N

当你用 php 访问$_POST['data'] 时,它们已经变成了字节(0xC4B05AC4B04E),所以回显它们会给你提供格式错误的数据:

header("Content-Type: text/html; charset=ISO-8859-9");
echo $_POST['data'];
// İZİN

您可以通过以下方式测试这是真的:

header("Content-Type: text/html; charset=ISO-8859-9");
echo "\xC4\xB0\x5A\xC4\xB0\x4E";
// İZİN

在 PHP 中,您需要在收到它后立即将其转换为 ISO-8859-9:

<?php
header("Content-Type: text/html; charset=ISO-8859-9");
$data =  "\xC4\xB0\x5A\xC4\xB0\x4E"; //$_POST['data'];
$proper = mb_convert_encoding( $data, "ISO-8859-9", "UTF-8" );
echo $proper;
//İZİN

请注意,在任何地方都使用 UTF-8 要容易得多,因为它几乎是最好的编码,并且网络喜欢它。如果您使用任何其他编码,那么您将必须时刻保持警惕。

【讨论】:

  • 感谢您的回答。我总是在我的应用程序中使用 UTF-8,但这是以前开发的应用程序,我既无法访问脚本也无法访问数据库。所以我必须找到一种方法来处理这些字符集。如果可能的话。
  • 我正在使用 ASP Classic。如果我将 HTML 页面设置为 UTF-8 编码,那么当我发布(使用标准 HTML 表单元素)时,服务器端收到的数据会用 ? 替换重音字符。但是当我执行 GET 时,字符会正确显示。在兼容模式下使用 IE 11。
猜你喜欢
  • 2016-11-26
  • 2020-12-28
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多