【发布时间】:2011-12-27 15:57:20
【问题描述】:
该方案是 html 表单中的文本输入字段,使用 jQuery.autocomplete 自动完成并获得适当的服务器响应(例如城市名称 json 列表)。整个包运行良好......除了客户端在输入重音字符(éèà..)时没有从服务器返回数据。和很多人一样,看起来我正面临一个字符编码问题,但尽管尝试了很多次(iconv、utf8_encode、urldecode...)和读数,但无法弄清楚在哪里以及如何解决它this one 例如。
因此,我需要一些帮助/提示来了解在哪里采取行动(在对 jQuery 自动完成代码进行原型设计之前......?)
编辑:可能也是 jQuery 重音折叠问题,我也会尝试that way。
配置:
服务器:Apache2.2 (debian lenny)
php : 编译 5.3.3 (所以选项 JSON_UNESCAPED_UNICODE 不适用于json_encode)
mysql:5.1.49,带有 MySQL 字符集:UTF-8 Unicode (utf8),
类:使用修改后的PFBC2.x 版本进行php表单构建-
元
该网站主要面向法国用户,因此全部采用 ISO-8859-1 设计(我猜最初的选择很糟糕):<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> -
jQuery自动补全代码(应用于城市输入框)
// 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 .'});';为该输入字段生成的代码符合上述预期。
-
使用 this function 将 mysql 行转换为 utf8 :
在将 json 发送回客户端之前,我将 msyql 返回的数组转换为 utf8。实际上,我还测试并编写了其他函数,但这并没有改变任何东西,所以我想重点不存在。$encoded_arr = utf8json($returnData); echo json_encode($encoded_arr); flush(); -
编码控制 1(客户端)
在 html 表单中嵌入控件,以检查实际传递给 jQuery.autocomplete 的字符编码: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 }); -
编码控制2(服务器端)
$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);发送小写普通字符(ea..),我得到的都是 ASCII。
发送小写重音字符 (éèà..),我得到的都是 UTF8。
所以我迷路了,因为服务器接收到正确的 char 字符串,产生了一个 json 返回(在没有 ajax 的情况下测试),但看起来客户端没有正确接收或解释这个。
【问题讨论】:
标签: php jquery character-encoding autocomplete