URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5083
[ Назад ]

Исходное сообщение
"анализ строки "

Отправлено greenetc , 24-Янв-06 15:13 
Программка на Си , требуется в строке , все символы одинарной кавычка '  - найти и заменить на такие же кавычки в количестве двух штук , то есть из , например , O'neil O'hara.mp3 , сделать - O''neil O''hara.mp3 . Поясню - это требуется для синтаксиса запросов mysql.

Содержание

Сообщения в этом обсуждении
"анализ строки "
Отправлено Hordi , 24-Янв-06 16:12 
Исходящий буфер должен быть в 2 раза больше входящего. length - размер исходящего
size_t escapeString(char *to, const char *from, size_t length)
{
    const char *source = from;
    char       *target = to;

    while(length > 0 && *source != '\0'){
        switch (*source){
            case '\\':
                *target++ = '\\';
                *target++ = '\\';
                break;

            case '\'':
                *target++ = '\'';
                *target++ = '\'';
                break;

            default:
                *target++ = *source;
                break;
        }
        ++source;
        --length;
    }

    *target = '\0';

    return target - to;
}


"анализ строки "
Отправлено dimus , 25-Янв-06 07:24 
>Исходящий буфер должен быть в 2 раза больше входящего....
Не обязательно. Возможно также сэкономить память, проводя сначала анализ строки на предмет выявления заменяемых символов. Если, допустим, нам надо заменить 2 кавычки, то нам потребуется буфер размером на 2 символа больше, чем исходный.
Недостатки метода:
1. На два прохода требуется больше времени, чем на один
2. Трудности с анализом фрагментов - это если исходный буфер содержит не всю строку
Достоинства:
1. Существенная экономия памяти. Если кавычек нет - вообще ничего не надо делать.
2. В первом проходе можно проводить анализ строки на предмет ошибок и второй проход может вообще не понадобиться.

"анализ строки "
Отправлено _Brick_ , 24-Янв-06 18:27 
А чем не угодила mysql_real_escape_string?

http://dev.mysql.com/doc/refman/4.0/ru/mysql-real-escape-str...


"анализ строки "
Отправлено greenetc , 01-Фев-06 14:53 
>А чем не угодила mysql_real_escape_string?
>
>http://dev.mysql.com/doc/refman/4.0/ru/mysql-real-escape-str...


не угодила, потому как не понимает всё равно .... даже если после обработки mysql_real_ecape_string, пишет что ошибка синтаксиса.

может кто подскажет ... где то в форуме в видел что в пятом мускуле нет проблем скавычками и всяким другим .... подскажите как это делается в пятом .