Схема представляет собой текстовое поле ввода в html-форме, которое заполняется автоматически с помощью jQuery.autocomplete и получения соответствующего ответа сервера (например, список json с названием города).Весь пакет работает хорошо ... за исключением того, что клиент не получает данные, возвращаемые с сервера, при наборе ударных символов (шт ..).Как и многие, похоже, что я сталкиваюсь с проблемой кодировки символов, но не могу понять, где и как ее решить, несмотря на множество попыток ( iconv , utf8_encode , urldecode ...) и чтения типа этот например.
Поэтому мне понадобится некоторая помощь / подсказки, чтобы понять, где действовать (перед созданием прототипа кода автозаполнения jQuery ...?)
РЕДАКТИРОВАТЬ: может также быть проблема сворачивания акцента jQuery, япопробую также таким образом .
Конфигурация:
сервер: 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
meta
Сайт в основном предназначен для французских пользователей, поэтому он все разработан с 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 .'});';
Сгенерированный код для этого поля ввода соответствует приведенному выше исключению.
Преобразование строк mysql в utf8 с использованием этой функции :
Я преобразую возвращаемый массив msyql в utf8 перед отправкой json обратно клиенту.На самом деле я тестировал и писал также другие функции, но это ничего не меняет, так что, думаю, дело не в этом.
$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 .
Так что я потерян каксервер получает правильную строку символов, выдает возврат json (проверено без ajax), но похоже, что клиент не получает или не интерпретирует это должным образом.