Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Ajax автозаполнение полей на русском языке / 6 сообщений из 6, страница 1 из 1
13.03.2015, 12:17
    #38903637
dakota1310
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
Добрый день, очень нужна помощь. Нужно сделать поле с автозаполнением городов на русском языке, использую autocomplete. Но при вводе в поле русских букв результат выводится как null столько раз сколько должно было быть городов и почему-то букву "o" он пишет как "н". В базе данных кодировка полей utf8.
Мой код:
auto.js (кодировка windows-1251)
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
$('#locality_name').autocomplete({ 
		      	source: function( request, response ) {
		      		$.ajax({					
		      			url : 'ajax.php',
		      			dataType: "json",
						data: {
						   name_startsWith: request.term,
						   type: 'locality'
						},
						 success: function( data ) {
							 response( $.map( data, function( item ) {
								return {
									label: item,
									value: item
								}
							}));
						}
		      		});
		      	},
		      	autoFocus: true,
		      	minLength: 0      	
		      });



ajax.php (кодировка windows-1251)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
header("Content-Type: text/html; charset=windows-1251");
include("config/config.php");

if($_GET['type'] == 'locality'){
  $data= array("SELECT locality FROM locality where locality LIKE '".strtoupper($_GET['name_startsWith'])."%'");
  $_GET['name_startsWith'] = iconv('UTF-8', 'windows-1251', $_GET['name_startsWith']);

  $result = mysql_query("SELECT locality_name FROM locality where locality_name LIKE '".strtoupper($_GET['name_startsWith'])."%'");	
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		array_push($data, $row['locality_name']);	
	}	
  echo json_encode($data);
} 
...
Рейтинг: 0 / 0
13.03.2015, 12:55
    #38903714
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
dakota1310В базе данных кодировка полей utf8А на странице, так понимаю, кодировка cp1251. Тогда перед использованием в запросе кодировка полученных от клиента данных должны быть преобразована к кодировке БД. Полученные из БД данные перед отдачей клиенту следует обратно перекодировать.

PS: Может, тогда проще сменить кодировку БД?
...
Рейтинг: 0 / 0
13.03.2015, 13:11
    #38903755
dakota1310
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
пробовала, перестало вообще приходить даже null значения((
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if($_GET['type'] == 'locality'){
    $_GET['name_startsWith'] = iconv('windows-1251', 'UTF-8', $_GET['name_startsWith']);
	$result = mysql_query("SELECT locality_name FROM locality where locality_name LIKE '".strtoupper($_GET['name_startsWith'])."%'");	

	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
	        $row['locality_name'] = iconv('UTF-8', 'windows-1251', $row['locality_name']);
		array_push($data, $row['locality_name']);	
	}	
	echo json_encode($query);
}
...
Рейтинг: 0 / 0
13.03.2015, 13:23
    #38903780
dakota1310
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
Фух, заработало))
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if($_GET['type'] == 'locality'){
    $_GET['name_startsWith'] = iconv( 'UTF-8', 'windows-1251', $_GET['name_startsWith']);
	$result = mysql_query("SELECT locality_name FROM locality where locality_name LIKE '".strtoupper($_GET['name_startsWith'])."%'");	
    $data = array();
	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
	   $row['locality_name'] = iconv( 'windows-1251', 'UTF-8', $row['locality_name']);
		array_push($data, $row['locality_name']);	
	}	
	echo json_encode($data);
}
...
Рейтинг: 0 / 0
13.03.2015, 13:24
    #38903783
dakota1310
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
vkle, ОГРОМНОЕ СПАСИБО ))))
...
Рейтинг: 0 / 0
15.03.2015, 00:36
    #38905035
dakota1310
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax автозаполнение полей на русском языке
Помогите с кодировкой. Использую плагин datatables ( http://datatables.net/) в таблице русские символы не отображаются. Кодировка таблицы базе utf8.
Код функции:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
static function simple ( $request, $conn, $table, $primaryKey, $columns )
	{
		$bindings = array();
		$db = self::db( $conn );

		// Build the SQL query string from the request
		$limit = self::limit( $request, $columns );
		$order = self::order( $request, $columns );
		$where = self::filter( $request, $columns, $bindings );

		// Main query to actually get the data
		$data = self::sql_exec( $db, $bindings,
			"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", self::pluck($columns, 'db'))."`
			 FROM `$table`
			 $where
			 $order
			 $limit"
		);

		// Data set length after filtering
		$resFilterLength = self::sql_exec( $db,
			"SELECT FOUND_ROWS()"
		);
		$recordsFiltered = $resFilterLength[0][0];

		// Total data set length
		$resTotalLength = self::sql_exec( $db,
			"SELECT COUNT(`{$primaryKey}`)
			 FROM   `$table`"
		);
		$recordsTotal = $resTotalLength[0][0];


		/*
		 * Output
		 */

		return array(
			"draw"            => intval( $request['draw'] ),
			"recordsTotal"    => intval( $recordsTotal ),
			"recordsFiltered" => intval( $recordsFiltered ),
			"data"            => self::data_output( $columns, $data )
		);
	}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Ajax автозаполнение полей на русском языке / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]