Php 针对ISO-8859-9字符集的Jquery Ajax Db编码被卡住
我试图通过Jquery应用程序将数据传递给db。我在编码方面有严重的问题 当前页面编码为iso-8859-9。我已经将我的ajax页面编码为iso-8859-9,并通过Php 针对ISO-8859-9字符集的Jquery Ajax Db编码被卡住,php,jquery,html,ajax,asp-classic,Php,Jquery,Html,Ajax,Asp Classic,我试图通过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页面并设置带有标题的编码,是否有效 PS:我正在处理HTML页面上的数据。处理器页面是一个ASP页面,我想它使用的是
contentType:“application/x-www-form-urlencoded;charset=iso-8859-9”传递.ajax数据
每次尝试时,它都将İZİN
值存储为ÄZÄN
如果我创建一个PHP页面并设置带有标题的编码,是否有效
PS:我正在处理HTML页面上的数据。处理器页面是一个ASP页面,我想它使用的是MsSQL db。我没有访问处理器页或数据库的权限。只需通过表单post输入数据
İZİNword和其他一些类似的单词在WHERE子句的其他页面上用于sql查询。因此,我无法将字符转换为HTML代码。我必须使用“作为”
谢谢你的建议 听起来问题在于访问者页面不支持utf-8
我对单词İZİN
及其乱七八糟的版本ÄZÄN
并不陌生。很可能是由于代码页。
来自
根据W3C XMLHTTPRequest标准,POST数据将始终使用UTF-8字符集传输到服务器
因此,在ajax设置中,字符集定义被忽略
您需要访问称为“处理器”页的页面。它必须具有utf-8代码页(65001)。
暂时在客户端,您可以在发送数据之前将UTF-8中编码的字母替换为预期的单字节形式的两个字节
function tr_map(data){
var tr_data = data;
var chrmap = {
"%C3%B6" : "%F6", //ö
"%C3%A7" : "%E7", //ç
"%C5%9F" : "%FE", //ş
"%C4%B1" : "%FD", //ı
"%C4%9F" : "%F0", //ğ
"%C3%BC" : "%FC", //ü
"%C3%96" : "%D6", //Ö
"%C3%87" : "%C7", //Ç
"%C5%9E" : "%DE", //Ş
"%C4%B0" : "%DD", //İ
"%C4%9E" : "%D0", //Ğ
"%C3%9C" : "%DC" //Ü
};
for (var chr in chrmap)
if(chrmap.hasOwnProperty(chr))
tr_data = tr_data.split(chr).join(chrmap[chr]);
return tr_data;
}
$.ajax({
url: "...",
type: "POST",
data: $("#myform").serialize(),
/*
other settings
success : ...
*/
beforeSend: function(x, s){s.data = tr_map(s.data);}
});
应用程序/x-www-form-urlencoded
没有字符集。它只是ASCII字符。在那里指定字符集将不起任何作用
jQuery通常将您的数据编码为:
编码为UTF-8
百分比编码
因此:
实际将其发布到服务器:
data=%C4%B0Z%C4%B0N
当您使用php访问$\u 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
您可能是在“使用contentType:application/x-www-form-urlencoded;charset=ISO-8859-9传递ajax数据”,但您实际上是在确保将其编码为ISO-8859-9。听起来你仍然在发送UTF-8编码,尽管你的内容类型中有声明,否则。@AnthonyWJones我怎么能确定?我在metaheader和ajax查询中将其设置为ISO-8859-9。谢谢您的回答。我真的试过了,但有个问题。有一些屏幕运行查询以报告超时和休假。这些查询直接使用这个词。例如,搜索İZİN或MESAİ单词。当我更改字符时,这些查询不起作用。所以我必须用“作为”,不客气。在中,这些查询直接使用单词
您的意思是GET
请求吗?您可能需要替换querystring参数。不,它不适用于GET
请求。有一个单独的页面用于假期,另一个单独的页面用于超时。如果您运行休假页面,sql查询将运行SELECT*FROM table WHERE column=“İZİN”
我猜。谢谢您的回答。我总是在我的应用程序中使用UTF-8,但这是以前开发的应用程序,我既不能访问脚本也不能访问数据库。所以我必须找到一种方法来处理这些字符集。如果可能的话。我正在使用ASP经典。如果我将HTML页面设置为UTF-8编码,当我发布(使用标准HTML表单元素)时,服务器端接收到的数据将用?替换重音字符?。但是当我做一个GET时,字符会正确显示。在兼容模式下使用IE11。
<?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