Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 针对ISO-8859-9字符集的Jquery Ajax Db编码被卡住_Php_Jquery_Html_Ajax_Asp Classic - Fatal编程技术网

Php 针对ISO-8859-9字符集的Jquery Ajax Db编码被卡住

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页面,我想它使用的是

我试图通过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页面,我想它使用的是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