PDA

Просмотр полной версии : Многострочный текст в запросе http


a1nt
26.12.2006, 00:14
Нужно передать сценарию (из Delphi) запрос из Memo1.Text. Когда запрос из одной строки, все проходит на ура, но когда появляется символ перевода каретки (#13#10), ничего не получается передать в форму, так как, насколько видно в Odisseus,строка запроса рвется на переводе строки. Насколько понимаю, в Memo1.Text нужно заменить все символы #13#10 (перевод каретки) на код html (c %). Подскажите, плиз, какой код в html будет переводить строку, и как наиболее удобно, заменить в строке подстроки A на подстроки B. То есть, одной функцией, поменять в string все переводы каретки на html коды
Заранее спасибо.

_Great_
26.12.2006, 00:21
%0d%0a - аналог 13,10 в HTML
А менять надо не только эти, а все спецсимволы на их HTML-коды.

a1nt
26.12.2006, 00:26
Вот кстати накатал функцию

function replacestr(const s, srch, replace: string): string;
var
i : integer;
source: string;
begin
source:= s;
result:= '';
repeat
i:=pos(srch, source);
if i > 0 then begin
result := result + copy(source,1,i-1) + replace;
source := copy (source,i+length(srch),maxint);
end
else
result := result + source;
until i<=0;
end;

Может кому еще пригодится
А менять надо не только эти, а все спецсимволы на их HTML-коды.
А есть готовые функции для обработки?

_Great_
26.12.2006, 00:28
А есть готовые функции для обработки?
если я не ошибаюсь, в винде есть апишка для кодирования строки по принципу urlencode.

a1nt
26.12.2006, 00:30
Вот так перевод уже нормально работает.
А какие еще символы нужно заменять?

_Great_
26.12.2006, 00:31
Все спецсимволы желательно, такие как:
&, =, пробел, 0x0A, 0x0D, русские буквы и многое другое.
Короче введи текст в адресной строке браузера и посмотри, как он его закодирует. Надо так же

a1nt
26.12.2006, 00:36
русские буквы
Кстати, с русскими буквами, почему-то проблем нет.

a1nt
26.12.2006, 00:41
function HTTPTran(St : String) : String;
var i : Integer;
begin
Result:='';
for i:=1 to length(St) do
if St[i] in ['a'..'z','A'..'Z','0','1'..'9'] then
Result:=Result+St[i]
else if St[i]=' ' then
Result:=Result+'+'
else
Result:=Result+'%'+IntToHex(Byte(St[i]),2);
end;
Вот что нашел. Вроде похоже. Буду пробовать.

_Great_
26.12.2006, 00:44
Во. Нормальная функция) Юзай её

a1nt
26.12.2006, 00:45
ага, все работает.