0

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

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

它像每次尝试一样存储İZİN价值。Ä°ZÄ°N

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

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

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

感谢您的建议!

4

1 回答 1

2

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

jQuery 通常会按照指定对您的数据进行 urlencode :

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

所以:

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

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

data=%C4%B0Z%C4%B0N

当您使用$_POST['data']php 访问时,它们已被转换为字节(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 要容易得多,因为它几乎是最好的编码,并且网络喜欢它。如果您使用任何其他编码,那么您将必须始终保持警惕。

于 2012-07-30T09:14:08.140 回答