Автор Тема: Ajax и кирилица с firefox / ie  (Прочетена 3218 пъти)

mx_starter

  • Участници
  • ***
  • Публикации: 10
    • Профил
Ajax и кирилица с firefox / ie
« -: Jun 19, 2007, 22:01 »
Здравейте, приятели.

Имам следния досаден проблем, който не зная как да разреша:

Посредством AJAX изпращам заявка до PHP скрипт (с POST метод, скриптът се казва time.php).
Пуснатата POST променлива (с име search_text) се използва от скрипта за търсене в база данни (кодирана в cp1251) и връщане на съответния резултат.

Проблемът възниква когато променливата, която POST-вам съдържа кирилица:

Ако използвам IE (версии 6 и 7), променливата може да се ползва директно в SQL заявката и всичко минава гладко, но не и с FF:
Примерен код
$post_variable = $_POST['search_text'];
$query = "SELECT name FROM names_table WHERE name LIKE '$post_variable%'";


Ако съм с FF (версии 1.5 и 2.0), променливата първо трябва да се конвертира през чрез iconv() и urldecode() функциите на PHP за да може да се ползва в SQL заявката:
Примерен код
$post_variable = iconv('utf-8', 'cp1251', urldecode($_POST['search_text']) );
$query = "SELECT name FROM names_table WHERE name LIKE '$post_variable%'";


В този случай пък скриптът работи с FF, но не и с IE.

Ако текстът който търсим е примерно "ТЕСТ", то уеб сървърът (Apache 2.2) генерира следните логове:

Ако заявката е от FF:
[/CODE]..."POST /ajax/time.php?search_text=%D0%A2%D0%95%D0%A1%D0%A2 HTTP/1.1"...[/CODE]

Ако заявката е от IE:
[/CODE]... "POST /ajax/time.php?search_text=\xd2\xc5\xd1\xd2 HTTP/1.1" ...[/CODE]

Както е видно - браузърите си кодират символите в заявките по различен начин и съответно - трябва да се разпознава браузър преди всяка заявка за да станат нещата.

А аз търся по-елегантен начин да се направи това.

Моля, отбележете че проблемът НЕ Е в кирилизацията на базата данни, нито пък в "кирилизирането" на AJAX комуникацията (няма никакви проблеми с върнатата кирилица) а по-скоро в начинът по който PHP интерпретира подадената му променлива на кирилица (или може би проблемът следва да се търси в Apache...).

JavaScript функцията която разпраща заявката:
Примерен код

function ajaxFunction(str)
{

xmlHttp=GetXmlHttpObject();

var url="time.php";
url = url + "?search_text=" + str;

xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,true);
xmlHttp.send(null);
}


Пробвах да задам предварително и няколко различни хедъра с setRequestHeader, но без резултат.


Накратко, въпросът е:
как да си изградя SQL заявката в която има кирилица без да разпознавам браузъри?
Някакви идеи от Вас професионалистите?
Благодарности в аванс!
Активен

mx_starter

  • Участници
  • ***
  • Публикации: 10
    • Профил
Ajax и кирилица с firefox / ie
« Отговор #1 -: Jun 19, 2007, 23:06 »
Здравейте отново.
Изглежда постигнах известен напредък с моя проблем.

Това което направих е, че промених леко JS функцията която инициира заявката към уеб сървъра.

Промяната е следната:
Примерен код

function ajaxFunction(str)
{

xmlHttp=GetXmlHttpObject();

var url="time.php";
url = url + "?search_text=" + str;

xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",encodeURI(url),true);
xmlHttp.send(null);
}


Както е видно, кодирам параметрите на заявката още преди изпращането и към уеб-сървъра и съответно редовете в лог файла на Apache сега изглеждат еднакво независимо дали заявката идва от IE или от FF.

След това използвам iconv() и urldecode() точно както описах в първия си пост и вече няма проблем.

Съответно - sql заявката сработва нормално както и всичко останало.

Но все ми се струва, че тази промяна в JS функцията може да се пропусне и обработката на параметъра да се прави с PHP...
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Програмист c, php, javascript, ajax
Предлагане
voip 2 3145 Последна публикация Aug 08, 2006, 16:15
от Italianeca
Програмист php, javascript, ajax
Търсене
voip 0 2165 Последна публикация Sep 22, 2006, 18:33
от voip
Ajax/php freelancer needed
Търсене
walktec 0 2498 Последна публикация Feb 20, 2007, 23:31
от walktec
Facecart ajax e-commerce platform bета
Общ форум
apetrov 5 2906 Последна публикация Dec 18, 2007, 12:10
от BULFON
curl AJAX
Web development
edmon 6 3159 Последна публикация Jun 14, 2010, 15:01
от BULFON