Автор Тема: опять кодировка )))  (Прочитано 3266 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Egiki

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.olviko.ru/smakc
опять кодировка )))
« : 05 Ноября 2002, 11:05:01 »
при отправки данных скрипту который пишет их в БД происходит глюк, если среди данных встречатеться значок № то все данный перекодируються ио кои - 8 в вин-1251. (((( типо кто знает что это такой напишите бцдц рад

Ежики.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
опять кодировка )))
« Ответ #1 : 05 Ноября 2002, 15:49:46 »
Не верю! Покажи скрипт записи в БД.
The documentations is your friend

Оффлайн Egiki

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.olviko.ru/smakc
опять кодировка )))
« Ответ #2 : 05 Ноября 2002, 15:57:59 »
щас напишу, вообщем вот оно

my $query = new CGI;
my $CGI = new CGI;
my $forward = $CGI->param (\'forward\');
print $CGI->redirect("$forward");
#print $CGI->header();
#Если надо обновить базу внесенными изменениями
if ($CGI->param(\'ac\')=~\'savechange\')
{
   #опишем переменные
   my (@parametr, $param, $dbh,$counter);
   my (@id, $tmp, $counter, $name, $fieldname, $table, $type, $value, $sql, $idfield,$in_file,$bytesread,$buffer,$tmp_file,$updir);
   #получим все переданные параметры
   @parametr=$CGI->param();
   #найдем ключевое поле и его значение
   foreach $param (@parametr){
      ($tmp, $counter, $name, $fieldname)=split (/\\&/,$param,4);      
      if ($tmp=~/field/ and $name=~/CodeField/){
         $value=$CGI->param($param);
         ($tmp, $idfield, $type)=split (/\\&/,$fieldname);
         if ($type=~/s/){$value=~s/\\\'/\\"/g;$value="\'".$value."\'"};
         if ($id[$counter]){
            $id[$counter]=$id[$counter]." and $idfield = $value"
         }
         else{
            $id[$counter]="$idfield = $value";
         };
      }
   }
   #распарсим все поля
   foreach $param (@parametr){
      my $file=$param;
      ($tmp, $counter, $name, $fieldname)=split (/\\&/,$param,4);
      if ($tmp=~/field/ and $name!~/CodeField/){
         $value=$CGI->param($param);
         ($table, $fieldname, $type)=split (/\\&/,$fieldname);
         $value =~ s/ {2,}/ /g;
         print qq($value);
# Передаем два параметра.
#    1 Путь к файлу на машине клиента принимаем из формы имя type
#    2 Путь к файлайм на сервере, заносим в базу.
#    Примечание надо определять что это Описание или картинка. И от этого ставиьт путь на сервер.
# Сохранение файлов на сервере
      if ($fieldname=~/FileInfo/) {
         if ($value) {
            print (\'*\');
            print $value;
            print (\'*
\');
            my $DATA_DIR = \'\';  
            my $DEFAULT_UPLOAD_DIR = \'\';
      
            my $MAX_SIZE_UPLOAD = 25; # Ko
   
            my $FORM_URL = \'../upload.html\';

            my $WEBMASTER_EMAIL = \'Egiki@olviko.ru\';
      
            my $DISPLAY_LANG = \'En\'; # Fr -> french

            if ($MAX_SIZE_UPLOAD) { $CGI::POST_MAX=12000 * $MAX_SIZE_UPLOAD; } # Ko
   
            my $query = new CGI;
   
#         Выделяем директорию куда сохранять
            my $typedir   = $query->param(\'forward\');
            my ($hlam);
               $_=$typedir;
               s/\\w://;
               s/([^\\/\\\\]+)$//;
               $_ = $1;
               s/\\.\\.+//g;
               s/\\s+//g;
               $typedir = $_;
               ($hlam , $typedir)=split (/\\?/,$typedir);
               ($typedir , $hlam)=split (/\\&/,$typedir);
               ($hlam , $typedir)=split (/\\=/,$typedir);
            print $typedir;
                my $dir = \'/home/uvd/html/upfile/\'.$typedir;
            print &Upload($query, $dir, $file);
         }
      }
#КОНЕЦ МОЕЕЕЕЕее
            if (!($value eq "")) {
            if ($type=~/s/){$value=~s/\\\'/\\"/g;$value="\'".$value."\'"};# Если пришли символы
            if ($value=~/\'\'/ and $type=~/s/){$value=\'NULL\'}; #Если пришло пусто.
               
            #сформируем sql запрос
   
            my $sql=qq(
            UPDATE $table SET $fieldname = $value
            WHERE $id[$counter]
            );
         #выполним запрос
#         print "$sql
";
            &SQLDo($sql);
            }
         }
   }
};


###########            Функция UPLOADв           #################
sub Upload  {
   my($query, $upload_dir, $file) = @_;
    my($file_query, $file_name, $size, $buff, $time, $bytes_count);
   $size = $bytes_count =0;
   $_ = $file_query = $query->param($file);


   s/\\w://;
   s/([^\\/\\\\]+)$//;
   $_ = $1;
   s/\\.\\.+//g;
   s/\\s+//g;
   $file_name = $_;

   if (!(-e "$upload_dir/$file_name")) {
   
   
    open(FILE,">$upload_dir/$file_name") || &Error("Error opening file $file_name for writing, error $!", 1);
    binmode FILE;
    $time=time();
    while ($bytes_count = read($file_query,$buff,12000)) {
       $size += $bytes_count;
        print FILE $buff;
    }
    close(FILE);
   }

}
###########            КОНЕЦ Функции UPLOADв           #################
sub win2koi{
    my($result);
    $result=$_[0];
    $result =~ tr[ЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪюабцдефгхийклмнопярстужвьызшэщчъ][абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ];
return $result;
}

Типа вот оно скрипт универсальный кто разбереться приник тому ))) но вот трабл при встрече значка № он данный конвертит в вин1251, причем проверял данный конверченный пришли уже скрипту тоесть кто то их уже конвертнуллл????????????

Оффлайн Egiki

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.olviko.ru/smakc
опять кодировка )))
« Ответ #3 : 05 Ноября 2002, 16:01:43 »
зы я там кое чего скипнул а то скрипт большой процедура SQLDo выполняет запросы в бауз кому не ясно.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
опять кодировка )))
« Ответ #4 : 05 Ноября 2002, 16:08:47 »
втыкни вот это:
sub win2koi {
    
my($result)=shift;
    
$result=~ trxC0xC1xC2xC3xC4xC5xC6xC7xC8xC9xCAxCBx CCxCDxCExCFxD0xD1xD2xD3xD4xD5xD6xD7xD8 xD9xDAxDBxDCxDDxDExDFxE0xE1xE2xE3xE4x E5xE6xE7xE8xE9xEAxEBxECxEDxEExEFxF0xF1 xF2xF3xF4xF5xF6xF7xF8xF9xFAxFBxFCxFDxFExFFxE1xE2xF7xE7xE4xE5xF6xFAxE9xEAxEBxECx EDxEExEFxF0xF2xF3xF4xF5xE6xE8xE3xFExFB xFDxFFxF9xF8xFCxE0xF1xC1xC2xD7xC7xC4x C5xD6xDAxC9xCAxCBxCCxCDxCExCFxD0xD2xD3 xD4xD5xC6xC8xC3xDExDBxDDxDFxD9xD8xDCxC0xD1/;
return 
$result;
}
The documentations is your friend

Оффлайн Egiki

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.olviko.ru/smakc
опять кодировка )))
« Ответ #5 : 05 Ноября 2002, 16:19:58 »
не ну это есесно какая разница какую функцию мою или твою испольнят прикол не в том что скрипт данные конвертит прикол в том что они скрипту уже приходят конверченный тоесть если я в самом начале напишу.

my $CGI = new CGI;
my @blabla = $CGI->param();
foreach my $bla_2 (@blabla){
  my $text = $CGI->param($bla_2);
print qq($text);
}

то текст будет конверченным.

ЗЫ. Я исправил этот глюк у себя но мне хотелосьбы знать почему данные приходят переконверченным.
ЗЫ-2. В кодировке кои нет такого значка как " № ". ????

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28