Титла: Ajax и кирилица с firefox / ie Публикувано от: mx_starter в Jun 19, 2007, 22:01 Здравейте, приятели.
Имам следния досаден проблем, който не зная как да разреша: Посредством AJAX изпращам заявка до PHP скрипт (с POST метод, скриптът се казва time.php). Пуснатата POST променлива (с име search_text) се използва от скрипта за търсене в база данни (кодирана в cp1251) и връщане на съответния резултат. Проблемът възниква когато променливата, която POST-вам съдържа кирилица: Ако използвам IE (версии 6 и 7), променливата може да се ползва директно в SQL заявката и всичко минава гладко, но не и с FF:
Ако съм с FF (версии 1.5 и 2.0), променливата първо трябва да се конвертира през чрез iconv() и urldecode() функциите на PHP за да може да се ползва в SQL заявката:
В този случай пък скриптът работи с 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 функцията която разпраща заявката:
Пробвах да задам предварително и няколко различни хедъра с setRequestHeader, но без резултат. Накратко, въпросът е: как да си изградя SQL заявката в която има кирилица без да разпознавам браузъри? Някакви идеи от Вас професионалистите? Благодарности в аванс! Титла: Ajax и кирилица с firefox / ie Публикувано от: mx_starter в Jun 19, 2007, 23:06 Здравейте отново.
Изглежда постигнах известен напредък с моя проблем. Това което направих е, че промених леко JS функцията която инициира заявката към уеб сървъра. Промяната е следната:
Както е видно, кодирам параметрите на заявката още преди изпращането и към уеб-сървъра и съответно редовете в лог файла на Apache сега изглеждат еднакво независимо дали заявката идва от IE или от FF. След това използвам iconv() и urldecode() точно както описах в първия си пост и вече няма проблем. Съответно - sql заявката сработва нормално както и всичко останало. Но все ми се струва, че тази промяна в JS функцията може да се пропусне и обработката на параметъра да се прави с PHP... |