Строка -> %xx%xx%xx%xx ...
Проблема надо послать скрипту русскую строку закодированную по стандарту
%xx (где xx - хекс код символа).
Типа вместо "script.cgi?data=тест+я" надо
"script.cgi?data=%A6%B8%C4%D5+%AA".
Пеобразовать обратно можно так
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
или так
$value =~ s/%(..)/pack("c",hex($1))/ge;
А как закодировать -- не пойму. Вернее пробовал функцией sprintf
$str =~ s/(\S)/sprintf("\%%o",ord($1))/eg;
но чегой-то я не учёл.
Подскажите, плиз.
ЗЫ Мож это преобразование и не надо делать? Скрипт работает и при передаче
незакодированных русских букв. Но вроде стандарт... Наверное нарушится
какая-то совместимость...
До свидания!
Евгений
Цитата:
On 2002-01-21 1804, Anonymous wrote
Доброе утро!
Проблема надо послать скрипту русскую строку закодированную по стандарту
%xx (где xx - хекс код символа).
Типа вместо "script.cgi?data=тест+я" надо
"script.cgi?data=%A6%B8%C4%D5+%AA".
urlencode(), urldecode(), rawurlencode(), rawurldecode()
Цитата:
urlencode(), urldecode(), rawurlencode(), rawurldecode()
Это чьи функции? В списке стандартных Перловых нет. Может из какого модуля?
Цитата:
On 2002-01-22 1133, Anonymous wrote
[quote]
urlencode(), urldecode(), rawurlencode(), rawurldecode()
Это чьи функции? В списке стандартных Перловых нет. Может из какого модуля?
[/quote]
Это PHP, sorry Про Perl не знаю, но, думаю, что чтение соответствующих RFC тебе поможет
$sstr =~ s/([^a-zA-Z0-9_ ])/sprintf ("%%%x", ord($1))/eg;
работает. Невнимательный был.