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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опять регулярки 
V
    Опции темы
TwiSteR
Дата 14.2.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кибер красавчег
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 15.6.2005
Где: World->Russia

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



Приветствую вновь уважаемые !

Задача такая, сделать подобие пхп функции addslashes()

Вот её описалово
=========================================================
string addslashes ( string str)


Возвращает сроку str, в которой перед каждым спецсимволом добавлен обратный слэш (\), например для последующего использования этой строки в запросе к базе данных. Экранируются одиночная кавычка ('), дойная кавычка ("), обратный слэш (\) и NUL (байт NULL).

Функция addslashes() часто применяется при записи в базу данных. Предположим, если нужно внести в базу данных имя O'reilly, то символ ' должен быть экранирован. В большинстве баз данных для этого используется \, строка будет выглядеть как O\'reilly. Заметьте, что сам символ \ в базу данных записан не будет. Если директива конфигурации magic_quotes_sybase имеет значение on, то символ ' будет экранироваться добавлением еще одного ' вместо \.

=========================================================

Пробую так

Код

sub addslashes {

    my $entry = @_[0];
    $entry =~ s/[\'\"]/\\'/gis;
    return $entry;

}

Но это не совсем правильно до конца ибо если есть " должно заменяться на \" а заменяется на \'

Подскажите плиз...
--------------------
PM MAIL WWW ICQ   Вверх
nitr
Дата 14.2.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А для чего тебе?
Если что смотри ман "\Q", пример, $str =~ /\Q$переменная\E/;
"\Q" сама добавляет "\" перед спец. символами, дабы не было ошибки.
Или для тебя самое простое:
Код

sub addslashes {
    my $entry = @_[0];
    $entry =~ s/'/\\'/gis;
    $entry =~ s/"/\\"/gis;
    return $entry;
}


А у тебя, думаю, ошибка: замени [\'\"] на ['"], это даж в твоём коде не могло работать.

Это сообщение отредактировал(а) nitr - 14.2.2006, 10:59


--------------------
PM   Вверх
TwiSteR
Дата 14.2.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кибер красавчег
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 15.6.2005
Где: World->Russia

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



nitr,

Сенкс сделал так

Код

sub addslashes {

    my $entry = @_[0];
    $entry =~ s/'/\\'/gis;
    $entry =~ s/"/\\"/gis;
    return $entry;

}

но вот так не пашет
Код

sub addslashes {

    my $entry = @_[0];
    $entry =~ /\Q$entry\E/;
    return $entry;

}


--------------------
PM MAIL WWW ICQ   Вверх
sharq
Дата 14.2.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



TwiSteR,
Код

sub addslashes {
    my $entry = shift;
    $entry =~ 
        s{
            (
                [ \s ' " \0 ]
            )
        }{
            "\\".$1
        }smegx;
    return $entry;
}
print addslashes(q~hello'dd "sd" s~);


smile
Добавлено @ 11:23
Можешь для экранирования запроса к БД использовать метод DBI quote.



Это сообщение отредактировал(а) sharq - 14.2.2006, 11:22


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
BlackLFL
Дата 14.2.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

my $var = "O'reilly";

my $rv = $dbh->do("INSERT INTO table_name ( row_name ) VALUES(". $dbh->quote( $var ) ) or die DBI->errstr;


Это сообщение отредактировал(а) BlackLFL - 14.2.2006, 12:09
PM WWW   Вверх
nitr
Дата 14.2.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



sharq,
прикольный код smile , лишь бы человек не запутался ;)
TwiSteR,
используй его код, он практичен. Вот модификация.. если не понятны "расширенные" регулярки:
Код

sub addslashes {
    my $entry = shift;
    $entry =~ s/([ '"\0])/"\\".$1/gise;
    return $entry;
}

Да и \Q здесь не причём... smile Извини, ошибочно запутал...
Добавлено @ 12:43
Кстати, форум использует регулярки... =)) Лучше б как в xml SAX использовалось, но конечно проще как щас smile
Я просто к слову ;)

Это сообщение отредактировал(а) nitr - 14.2.2006, 12:47


--------------------
PM   Вверх
sharq
Дата 14.2.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



nitr,
Цитата(nitr @ 14.2.2006, 13:42 Найти цитируемый пост)
$entry =~ s/([ '"\0])/"\\".$1/gise;

ключ i - здесь нен нужен. smile
а m - лучше оставить.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
nitr
Дата 14.2.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



=) канечна не нужен... применение m лучше расскажи в этом примере.


--------------------
PM   Вверх
TwiSteR
Дата 14.2.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кибер красавчег
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 15.6.2005
Где: World->Russia

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



Всём огромное спасибо !
--------------------
PM MAIL WWW ICQ   Вверх
sharq
Дата 16.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



nitr,
Цитата(nitr @ 14.2.2006, 18:04 Найти цитируемый пост)
применение m лучше расскажи в этом примере.

этот ключик сочитается вместе с ключиком s.
смотри документацию по re. smile

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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