За последние 24 часа нас посетили 22199 программистов и 1153 робота. Сейчас ищут 768 программистов ...

Русские буквы в параметрах URL запроса

Тема в разделе "JavaScript и AJAX", создана пользователем lebedev2k, 16 сен 2006.

  1. lebedev2k

    lebedev2k Активный пользователь

    С нами с:
    12 сен 2006
    Сообщения:
    3
    Симпатии:
    0
    Есть такая проблема:
    на HTML странице есть форма, в которой есть текстовые поля, по нажатию на кнопку (кнопка не типа Submit) необходимо послать на сервер запрос. Таким образом составляем URL, например, test.php?action=SomeAction&name=SomeText. Так вот SomeText - это значение одного из текстовых полей, причем текст содержит русские символы, соответственно для того, чтобы использовать его в параметрах запроса, надо его перевести в соответствующий код. Делаем это, используя функцию JavaScript escape(str).
    Текст преобразовывается в формат %u0432%u0444 и т.д, т.е в юникод формат.
    В test.php получаем параметры запроса с помощью $_GET['name']. Однако я получаю точно такие же кракозябли.

    Вопрос.
    Как эти кракозябли перекодировать в нормальный текст? (функция rawurldecode не помогла)
     
  2. Davil

    Davil Guest

    Проще отправить данные формы по POST.
     
  3. Davil

    Davil Guest

    И PHP кодирует и декодирует строки автоматически...
     
  4. lebedev2k

    lebedev2k Активный пользователь

    С нами с:
    12 сен 2006
    Сообщения:
    3
    Симпатии:
    0
    Так не получится, т.к запрос должен выполняться асинхронно, а не на событие OnSumbit. Это AJAX подход. Значение параметра должно фигурировать в параметрах запроса.
     
  5. Anonymous

    Anonymous Guest

    AJAX подход позволяет отрпавить данные методом POST.
     
  6. lebedev2k

    lebedev2k Активный пользователь

    С нами с:
    12 сен 2006
    Сообщения:
    3
    Симпатии:
    0
    Если можно, то поподробнее?
     
  7. Davil

    Davil Guest

    Что именно произошло?
    Почему она не помогла, или по каким параметрам она не подходит?

    По моему Олег имеет в виду XMLHTTPRequest. Хотя я не уверен...
     
  8. Anonymous

    Anonymous Guest

    2Davil, мы уже решили, на бакенде (через асю) ;)
     
  9. Davil

    Davil Guest

    Интересно послушать решение данной проблемы...
     
  10. Anonymous

    Anonymous Guest

    Сослался на статью Котерова [http://www.dklab.ru/lib/Subsys_JsHttpRequest/], просто сам посылал русские буквы этим способом, и знаю, что он работает:

    Вот лог, если что:

    20:49 #KiD: там есть прямо раздел в статье - решение проблемы с кодировками...
    20:54 SergeyL: xmlrequest = new XMLHttpRequest();
    ...
    url = "index.php"
    xmlrequest.open("POST", url, true);
    xmlrequest.send(null);

    Если засылаю такой запрос через POST, то все значения с формы автоматически также присоединяться к запросу?

    20:55 SergeyL: то бишь в index.php я смогу просто вытащить их как $_POST['textfield']?
    20:56 #KiD: да
    20:57 #KiD: вы их в методе open перечислите прям как getElementById().value - и они уйдут постом
    когда сделаете метод post
    20:58 #KiD: req.open('POST', 'load.php?test=abc', true);
    // Посылаем данные запроса (задаются в виде хэша).
    var query = '' + document.getElementById('query').value;
    req.send({ q: query });
    21:20 SergeyL: спасибо, сейчас попробую
     
  11. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Для грядущих поколений.
    url-кодирование строки — encodeURIComponent
    url-декодирование строки — decodeURIComponent

    escape() тут вообще никоем боком.
     
  12. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Второй день не могу разобраться как POST-ом послать данные

    есть такие JS фенкции
    Эта при нажатии на кнопку

    Код (Text):
    1. function change_kom(p){
    2.     var kom=document.getElementById('id_kom').value;
    3.     var url='js/player_ch.php';
    4.     var param=new Array();
    5.     param['t']=document.getElementById('id_name_kom').value;
    6.     sendRequest(url, param, 'POST');
    7. }
    Это ALAXовские
    Код (Text):
    1. function getXMLHTTPRequest(){
    2.     var xRequest=null;
    3.     if (window.XMLHttpRequest){
    4.         xRequest=new XMLHttpRequest();
    5.     } else if (window.ActiveXObject) {
    6.         xRequest=new ActiveXObject("Microsoft.XMLHTTP");
    7.     }
    8.     return xRequest;
    9. }
    10.  
    11. function sendRequest(url, params, HttpMethod){
    12.     if (!HttpMethod){
    13.         HttpMethod="GET";
    14.     }
    15.     req=getXMLHTTPRequest();
    16.     if (req){
    17.         req.onreadystatechange=onReadyState;
    18.         req.open(HttpMethod, url, true);
    19.         req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    20.         req.send(params);
    21.     }
    22. }
    докапался до того что выдается ошибка (в консоли Firefox)
    Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.send]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: http://toto.greenmile.ru/admin/js/player.js :: sendRequest :: line 172" data: no]

    Line 172 это req.send(params);

    Кто нить сталкивался с такой проблемой???
     
  13. Anonymous

    Anonymous Guest

    Вльдемар, req.send(params); — params не должен быть массив!
     
  14. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Вот таким образом не работало {q: perem}.
    Ну да ладно, разобрался уже кое как :)

    Отдаю вот так post='var=блабла&var2=блаблабла';

    Я как мне на сервере обратно строки раздекодить с помощью php, если они закодированы java-функцией encodeURIComponent ???
     
  15. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    urldecode и учесть, что кодировка строки - utf-8
     
  16. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Вльдемар, AlexGousev не надо ничего раскодировать, все само раскодируется.
     
  17. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Всем пасиба!!!
    Начинаю потихоньку осваивать :))

    По моему лучше раскодировать, так надежнее...
     
  18. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Вльдемар, раскодируя уже раскодированное ты можешь получить черти-что. Так что надежного тут нет ничего.