Здравейте, приятели.
Имам следния досаден проблем, който не зная как да разреша:
Посредством 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 заявката в която има кирилица без да разпознавам браузъри?
Някакви идеи от Вас професионалистите?
Благодарности в аванс!