Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 12:38   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос AJAX JQuery php MySQL Проблема с кирилицей

Создал форму <input type="text" .....> для проверки имени (Если введенное в форму имя существует то выводится предупреждение "Имя занято" иначе выводится "имя свободно") Проверку осуществляю с помощью AJAX JQuery php MySQL

При вводе в форму уже существующего имени на латинице выводится предупреждение что "имя занято" То есть работает как нужно

А вот при вводе в форму уже существующего имени на кирилице выводится "имя свободно" Хотя имя занято

В apache и MySQL использую кодировку cp-1251

Я пишу в этот раздел потому-что думаю что проблема в JQuery или AJAX Хотя может быть и не в них

Подскажите что может быть не так

Последний раз редактировалось gunsoy; 12.11.2011 в 12:41.
gunsoy вне форума Ответить с цитированием
Старый 12.11.2011, 14:07   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Сверь кодировку самих файлов, .htaccess и базы.
Проверь также в какой кодировке выводится страница.
Везде должна быть вин1251.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 13.11.2011, 10:44   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

В FF всё равно периодически будут всплывать каракули.

Решение:
- Установить кодировку utf-8.
Виталий Желтяков вне форума Ответить с цитированием
Старый 14.11.2011, 07:01   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

+100500 к utf8
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 14.11.2011, 10:02   #5
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

ajax работает "нормально" только в кодировке utf8, при работе с win-1251 требуются дополнительно конвертировать данные, полученые от веб страницы
UTF8 -> win-1251
Lesha вне форума Ответить с цитированием
Старый 14.11.2011, 18:27   #6
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Спасибо за ответы
gunsoy вне форума Ответить с цитированием
Старый 14.11.2011, 21:14   #7
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
при работе с win-1251 требуются дополнительно конвертировать данные, полученые от веб страницы
UTF8 -> win-1251
Полностью не помогает.
В FF периодически при пересылке сложных данных (например, массивов) кодировка win-1251 не определяется и появляются каракули.
Виталий Желтяков вне форума Ответить с цитированием
Старый 14.11.2011, 22:54   #8
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

я просто навскидку прикинул :D

меня вдохновило и я написал статью :D

До сей поры работать с AJAX в кодировке WINDOWS-1251 на кириллице было невозможно.
Однако давайте посмотрим в чем же была проблема?

Это функция encodeURIComponent(srt) выдает всегда закодированный результат в кодирове UTF8, вне зависимости от кодировки, которой идут в нее передаваемые данные.

Так чтоже нужно зделать чтобы передаваемые данные были в кодировке ANSI ?

Правильно, отказаться от использования этой функции вообще!

Напишем код который принудительно переопределит функцию encodeURIComponent и раз и навсегда заcтавит ее обрабатывать WIN-1251 как положено!

Код:
// Инициализируем таблицу перевода
var transAnsiAjaxSys = [];
for (var i = 0x410; i <= 0x44F; i++)
  transAnsiAjaxSys[i] = i - 0x350; // А-Яа-я
transAnsiAjaxSys[0x401] = 0xA8;    // Ё
transAnsiAjaxSys[0x451] = 0xB8;    // ё

// Сохраняем стандартную функцию escape()
//var escapeOrig = window.escape;

// Переопределяем функцию escape()
window.encodeURIComponent = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof transAnsiAjaxSys[n] != 'undefined')
      n = transAnsiAjaxSys[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escape(String.fromCharCode.apply(null, ret));
}
упакуем теперь это в модуль ajax_ansi_func.js

и возмем самый классический пример на Jquery

form.html

Код HTML:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/></head><body>
</head><body>
<!-- система переопределения методов работы для WIN-1251 -->
<script type="text/javascript" src="ajax_ansi_func.js"></script>
<script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
<script>
function testgp(d) { document.getElementById('result').innerHTML=d; }
</script>
<form>
	Проверка GET
	<br>напишите яблоко
	<input type=text name=ge><p>
</form>
<button href=# onclick="$.get('proh2.php',{ ge: document.forms[0].ge.value }, testgp); return false;">проверить GET</button>
<form>
	Проверка POST
	<br>напишите яблоко
	<input type=text name=ge><p>
	<br>напишите тыква
	<input type=text name=ge2><p>
</form>
<button onclick="$.post('proh2.php', $('form').eq(1).serialize(), testgp); return false;">проверить POST</button>
<p id=result></p>
и файл приемник

proh2.php

PHP код:
<?php
header
("Content-Type: text/html;charset=windows-1251");
if (isset(
$_GET["ge"])) { print $_GET["ge"]." пришло"; }
if (isset(
$_POST["ge"])) { print $_POST["ge"]." и ".$_POST["ge2"]." пришло"; }
скачать пример : http://jqbook.narod.ru/works/ajax_ansi.zip
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax jquery php gunsoy JavaScript, Ajax 17 13.01.2014 14:33
Проверьте скрипт на своем компе ajax jquery php gunsoy JavaScript, Ajax 13 17.10.2011 05:32
MySQL Ajax JQuery gunsoy SQL, базы данных 2 26.09.2011 09:31
Проблема с jQuery AJAX Cheise Помощь студентам 2 02.08.2011 17:50