Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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 Ajax自动完成在字符编码中丢失_Php_Jquery_Character Encoding_Autocomplete - Fatal编程技术网

Php Ajax自动完成在字符编码中丢失

Php Ajax自动完成在字符编码中丢失,php,jquery,character-encoding,autocomplete,Php,Jquery,Character Encoding,Autocomplete,scheme是一个html表单中的文本输入字段,将使用并获得适当的服务器响应(例如,城市名称json列表)自动完成。整个程序运行良好。。。但客户端在键入重音字符(èè..)时不会从服务器返回数据。和许多人一样,看起来我面临着一个字符编码问题,但尽管我做了很多尝试(,…)和阅读了很多类似的内容,但还是无法找到解决问题的方法 因此,我需要一些帮助/提示来理解在何处采取行动(在原型化jQuery自动完成代码之前…?) 编辑:可能也是jQuery重音折叠的问题,我也会试试 配置: 服务器:Apach

scheme是一个html表单中的文本输入字段,将使用并获得适当的服务器响应(例如,城市名称json列表)自动完成。整个程序运行良好。。。但客户端在键入重音字符(èè..)时不会从服务器返回数据。和许多人一样,看起来我面临着一个字符编码问题,但尽管我做了很多尝试(,…)和阅读了很多类似的内容,但还是无法找到解决问题的方法

因此,我需要一些帮助/提示来理解在何处采取行动(在原型化jQuery自动完成代码之前…?)

编辑:可能也是jQuery重音折叠的问题,我也会试试


  • 配置:
    服务器:Apache2.2(debian lenny)
    php:compiled 5.3.3(因此JSON_UNESCAPED_UNICODE选项不适用于)
    mysql:5.1.49和mysql字符集:UTF-8 Unicode(utf8),
    类:使用php表单构建的修改版本


  • 该网站主要面向法国用户,因此其设计全部采用ISO-8859-1(我猜这是一个糟糕的初始选择):

    为该输入字段生成的代码与上述预期匹配

  • 使用以下命令将mysql行转换为utf8:
    在将json发送回客户端之前,我将msyql返回的数组转换为utf8。事实上,我还测试并编写了其他函数,但这并没有改变任何东西,所以我想关键不在这里

    $encoded_arr = utf8json($returnData);   
    echo json_encode($encoded_arr);   
    flush();   
    
  • 编码控制1(客户端)
    html表单中的嵌入控件,用于检查实际传递给以下对象的字符编码:

    发送小写普通字符(ea..),我得到的所有字符都是ASCII
    发送小写重音字符(èè..),我得到的所有字符都是UTF8


因此,当服务器接收到正确的字符字符串,生成json返回(在没有ajax的情况下进行测试)时,我就不知所措了,但客户端似乎没有正确地接收或解释这个问题。

对于那些面临相同类型的…%$@问题的人,下面是我为解决我的问题所做的:

  • 在服务器端使用检查每个节点(例如客户端、apache服务器、mysql服务器)上的字符编码

  • 最后指出了位置节点的问题:在我的例子中,将UTF8字符传递给mysql服务器i/o latin ISO-8859-1,因此mysql服务器没有返回预期的答案,我无法通过直接向服务器脚本发送url数据进行检测或调试。因此,我将输入和输出记录在一个文件中,检查条目字符编码和mysql服务器输出

  • 将ajax请求更改为POST i/o GET

  • 通过在发送mysql服务器请求之前将$\u POST数据编码到ISO来解决此问题,如所述

// DEBUG Testing (tested w/ and w/o the $charset_attr: no change)
$charset_attr = 'contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1"';
echo 'jQuery("#' . $this->attributes["id"] . '").autocomplete({source:"' , $this->xhr_path . '", minLength:2, ' . $charset_attr .'});';
$encoded_arr = utf8json($returnData);   
echo json_encode($encoded_arr);   
flush();   
jQuery(document).ready(function() {   
<?php   
$test_str ="foobar";
$check_encoding = "'" . mb_detect_encoding($test_str) . "'";
?>
alert('Check charset server encoding: ' + <?php echo $check_encoding;?> ); // output : ASCII
});
$inputData = (isset($_GET))? htmlspecialchars($_GET['term'],ENT_COMPAT, 'UTF-8') : NULL;   
$encoding_get = mb_detect_encoding($_GET['term']);   
$encoding_data = mb_detect_encoding($inputData);   
$utf8converted = @iconv(strtolower($encoding_get), 'utf-8', $inputData);   
$checkconversion = mb_detect_encoding($utf8converted);