Показать сообщение отдельно
Старый 26.03.2010, 01:48   #1  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
"Microsoft Web Browser" ActiveX control, проблема с передачей данных
Использую ActiveX контрол "Microsoft Web Browser" следующим образом:

X++:
    COMVariant  flags;
    COMVariant  targetFrameName;
    COMVariant  postData;
    COMVariant  headers;
    str         headersStr = 'Content-Type: application/x-www-form-urlencoded\r\n';
    ;

    flags           = COMVariant::createFromInt64(0);
    targetFrameName = COMVariant::createFromStr('');
    postData        = COMVariant::createFromArray(element.str2array(text));
    headers         = COMVariant::createFromStr(headersStr);

    WebBrowser.Navigate(url, flags, targetFrameName, postData, headers);

Не могу понять, как правильно закодировать переменную text для postData.
Если text == "+1&2+3&4", то плюсы и амперсанды при передаче исчезают: "1,2 3,4".
Интернет подсказал, что надо менять плюс на %2B, а амперсанд на %26, но почему-то у меня при передаче они не преобразуются обратно в плюсы и амерсанды, а так и приходят: "%2B1%262%2B3%264"

Вот код используемой функции str2array()
X++:
Array str2array(str _data)
{
    Array   arr;
    int     i;
    ;

    //_data = strreplace(_data, num2char(160), ' ');
    //_data = strreplace(_data, '%', '%25');
    _data = strreplace(_data, '&', '%26');
    _data = strreplace(_data, '+', '%2B');

    arr = new Array(Types::Enum);

    for (i = 1; i <= strlen(_data); i++)
        arr.value(i, char2num(_data, i));

    return arr;
}

Что я делаю не так, как правильно передавать спец. символы?