ISO-8859-9字符集的Jquery Ajax Db编码问题


Stuck at Jquery Ajax Db Encoding for ISO-8859-9 Charset

我正试图通过Jquery应用程序将数据传递到数据库。我在编码方面有严重问题。

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

它在每次尝试时都将İZİN值存储为Ä°ZÄ°N

如果我创建一个PHP页面并设置带标题的编码,它能工作吗?

附言:我正在处理HTML页面上的数据。处理器页面是一个ASP页面,我猜使用的是MsSQL数据库。我没有访问处理器页面或数据库的权限。只是通过表单投递输入数据。

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

谢谢你的建议!

application/x-www-form-urlencoded没有字符集。它只是ASCII字符。在那里指定字符集不会有任何作用。

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

  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都要容易得多,因为它几乎是最好的编码,而且网络也很喜欢它。如果你使用任何其他编码,那么你就必须时刻保持警惕。