LINUX.ORG.RU

cgi-библиотека на bash


0

1

Сейчас я использую bashlib, но тут (внезапно) оказалось, что оно ломает русский текст в post-запросах.

Собственно, вопроса два:

1) Есть ли другая подобная библиотека на bash? Мне нужно лишь парсить post/get запросы и cookies.

2) Как исправить этот баг в bashlib? Сейчас там вот такой код:

      #
      # get the name of the key, and decode it
      #
      name=${Q%%=*}
      name=$(echo ${name} | \
             sed -e 's/%\(\)/\\\x/g' | \
             tr "+" " ")
      name=$(echo ${name} | \
             tr -d ".-")
      name=$(printf ${name})
  
      #
      # get the value and decode it. This is tricky... printf chokes on
      # hex values in the form \xNN when there is another hex-ish value
      # (i.e., a-fA-F) immediately after the first two. My (horrible)
      # solution is to put a space aftet the \xNN, give the value to
      # printf, and then remove it.
      #
      tmpvalue=${Q#*=}
      tmpvalue=$(echo ${tmpvalue} | \
                 sed -e 's/%\(..\)/\\\x\1 /g' | \
                 tr "+" " ")
      #echo "Intermediate \$value: ${tmpvalue}" 1>&2
  
      #
      # Iterate through tmpvalue and printf each string, and append it to
      # value
      #
      
      for i in "${tmpvalue}"; do
          g=$(printf "${i}")
          value="${value}${g}"
      done
      #value=$(echo ${value})
  
      eval "export FORM_${name}='${value}'"
★★★★★

А сишную не лучше было бы использовать?

А чтобы русский язык понимало, надо на стороне клиента кодировать текст запроса, а на стороне сервера - декодировать. В принципе, для этого можно простенький скрипт на sed набросать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от X10Dead

у меня были трудности в RL, я пару недель вообще не брался за него

derlafff ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Оно и так кодирует, например

%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0

Раскодировка, впринципе, работает нормально, только вот русские символы ломаются

derlafff ★★★★★
() автор топика

Кстати, я, пока по-молодости извращался, сделал на баше элементарный форум (что-то вроде IRC, где все сообщения идут лентой, без возможности правки), а еще делал веб-тесты. Могу скинуть этот ужас, если хочешь.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Кстати, этот скрипт

#!/bin/sh
#Converts Data sent by method Post or Get
# into stdout like param1 name1 param2 name2 etc.

if [ "$REQUEST_METHOD" = "POST" ] ; then
    QUERY_STRING=`sed "s/\\\`/_/g"`
fi

line=`echo $QUERY_STRING|sed 's/&/ /g'`

for pair in $line
do
    name=`echo $pair|sed 's/=/ /g'|awk '{print $1}'`
    type=`echo $pair|sed 's/=/ /g'|awk '{print $2}'|sed -e 's/%\(\)/\\\x/g'|sed 's/+/ /g'`
#    printf "${name}=${type}\n"
    printf "${name}=\"${type}\"\n"
done
русский не ломал

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Собственно, подставил твое выражение и все заработало, спасибо.

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