Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Допустимые символы. 
:(
    Опции темы
Dima85
Дата 6.10.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Я отсеиваю все потанциально ненужные и опасные символы таким образом:
$messages=~s/[^ .,\\*$%@()~_!?:;\/a-zA-Zа-яА-ЯЁё0-9[\]_-]+//g;

Но почему в итоге получаю непонятные символы? Тоесть некоторые буквы такие как "р", "т" пишуться как �:
Идея п�ивле�� по�ен�иал�н�� клиен�ов �азмес�и�� �еклам� на сай�е.
PM MAIL   Вверх
b00
Дата 6.10.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2009
Где: Петербург

Репутация: нет
Всего: нет



Кодировку скрипта и кодировку входа проверяли? use encoding?
PM MAIL WWW Jabber   Вверх
gcc
Дата 6.10.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Dima85

Код

 use Encode;
           $messages = Encode::decode('utf8', $_);

$messages=~s/[^ .,\\*$%@()~_!?:;\/a-zA-Zа-яА-ЯЁё0-9[\]_-]+//g;
    
          $messages = Encode::encode('utf8', $_ );


Это сообщение отредактировал(а) gcc - 7.10.2009, 06:23
PM WWW ICQ Skype GTalk Jabber   Вверх
Dima85
Дата 6.10.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Да, везде UTF-8
Когда нет этой фильтрации, все работает хорошо.
PM MAIL   Вверх
arto
Дата 6.10.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



use utf8
PM MAIL ICQ   Вверх
gcc
Дата 7.10.2009, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Dima85, то что я написал не работает? 
PM WWW ICQ Skype GTalk Jabber   Вверх
Dima85
Дата 7.10.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Извените что отвечаю так долго. Пытался разобраться сам, перепроверил все кодировки еще раз, везде Dos/Windows формат - UTF-8.

Впервые с таким встречаюсь. На вывод тоже стит:
print "Content-type: text/html; charset=UTF-8\n\n";

Теперь что касаеться предложенных способов.
gcc, ваш способ с  use Encode почему-то не сработал. Ошибок нет. Но и выводить текст с переменной $messages он вообще отказываеться.

arto, use utf8 тоже не помог.

Возможно поможет отрывок кода:

Код

#!/usr/bin/perl
use CGI qw(param);
use strict;
#use CGI::Carp qw/fatalsToBrowser/;
use Fcntl ':flock'; # блок файлов
use Net::SMTP;    # Подключаем модуль SMTP.

##############################################################
my($directory)= $ENV{'SCRIPT_FILENAME'}; # смотрим путь где находится скрипт
$directory=~s/\\/\//gis; # если есть \ меняим их на /
$directory=~s/[^\\\/]+$//is; # стираем название нашего скрипта
$directory=~s/\/cgi-bin\//\//gis; # стираем папку cgi-bin
$directory.="data"; # папка куда сохраняются все записи
##############################################################

my $username = param("username");
my $email = param("email");
my $total = param("total");
my $messages = param("messages");

$username=substr($username,0,25);
$email=substr($email,0,25);
$total =substr($total,0,25);
$messages=substr($messages,0,2000);

$username=~s/[^ a-zA-Zа-яА-Я@().0-9_-]+//g;
$email=~s/[^a-zA-Zа-яА-Я@().0-9_-]+//g;
$total=~s/[^a-zA-Zа-яА-Я().0-9_-]+//g;
$messages=~s/\r\n/ /g; #Работа с Enter <br>
$messages=~s/[^ .\\*$%@()~_!?:;\/a-zA-Zа-яА-ЯЁё0-9[\]_-]+//g;

print "Content-type: text/html; charset=UTF-8\n\n";

***

Далее идет отправка на e-mail, сохранение в файл (в котором и появляються нечитабельные символы) и вывод на экнар текста что все прошло удачьно - что тоже странно он выводиться нормально.

Может я как-то неправельно сохраняю, выкладываю код:

Код

***
  open(LOG, ">>$directory/orders.csv") or die "Can't open file $!\n";
  flock(LOG, LOCK_EX); #назапись
  print LOG "\r\n$messages,$ENV{REMOTE_ADDR}";
  close(LOG) or die "Can't close file $!\n";

***


Спасибо.


Это сообщение отредактировал(а) Dima85 - 7.10.2009, 13:03
PM MAIL   Вверх
gcc
Дата 7.10.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

 use Encode;
           $messages = Encode::decode('utf8', $messages);
$messages=~s/[^ .,\\*$%@()~_!?:;\/a-zA-Zа-яА-ЯЁё0-9[\]_-]+//g;
    
          $messages = Encode::encode('utf8', $messages );

PM WWW ICQ Skype GTalk Jabber   Вверх
Dima85
Дата 7.10.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



gcc, латиница и цыфры записываються в файл но вся кирилица стираеться.

Насчет $_ и  $messages, да действительно в моем случае нужно было заменить $_ на $messages, сам почему-то не додумался.

Но в итоге как и раньше - не работает.

Это сообщение отредактировал(а) Dima85 - 7.10.2009, 13:25
PM MAIL   Вверх
ginnie
Дата 7.10.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Dima85, можно попробовать

Код

use utf8;
use open OUT => ':utf8';



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.