LINUX.ORG.RU

cgi-bin


0

0

Приветы. Проблема с русским фонтом - при передачи из формы в программу cgi методом GET символы выше 128 - включая все русские пеерводяться в записи вида %N, где N - видимо код ASCII, получившийся в рез-е смещения после 128 - не проверил еще ;) Дык вот - кто бы подсказал, - без конвертаторов где то наверное 8 битик включить можно и насладить русским.

anonymous

$value =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;

Susanin
()

Спасибо! Жаль - программа на C а не на Перле - если кто-то подскажет конвертацию hectodec на C - буду премного признателен. Наверняка в стандарных либрарах функция валяется, а я о ней не знаю просто ;)

anonymous
()

Программу не дам, алгоритм следующий:

1) Разбиваем ввод на строки
2) Для каждой строки (b=0, a=0):
2а) Если символ не равен %, копируем строка[a]=строка[b]; a++, b++;
2б) Если символ равет %, то берем следующие два и делаем следующее:
c = toupper (строка [++b]) ;
c = ((c>='0')&&(c<='9'))?c-'0':c-'A';
d = toupper (строка [++b]);
d = ((d>='0')&&(c<='9'))?d-'0':d-'A';
строка [a] = (c<<4) & d ; a++, b++;

Все. Проверок нет (на что-нибудь типа "%X9"), но работать будет.

anonymous
()

Да! Поспешил и забыл последний пункт:

3) строка [b] = '\0';

anonymous
()

Решил для полноты картины еще добавить (ну подробнее уже просто некуда):

проверки элементарны -- на шаге 2б проверять, чтобы "c" и "d" после преобразования (первые четыре строки) были в пределах от 0 и до 15.

anonymous
()

Проверка позволит всего-навсего отследить кривые данные.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.