LINUX.ORG.RU

c++ замена управляющих символов?


0

0

string str( "abc\r\ndefjh");
string replaceFunction(str)
{
string searchString( "\r\n" );
string replaceString( "<br>" );
cout << "str before replace: " << str << endl;
string::size_type pos = 0;
while ( (pos = str.find(searchString, pos)) != string::npos ) {
str.replace( pos, searchString.size(), replaceString );
pos++;
}
cout << "str after replace: " << str << endl ;
return str;
}

В консольке такая конструкция работает без вопросов, т.е заменяет управляющие символы на тег "<br>". Но не обрабатывает броузерную строку запроса содержащую те же управляющие символы("\r\n") , причем оные очень даже явно наблюдаются - "%0D%0A". С символом пробела (" ") замена срабатывает, т.е в функцию строка передается. В какую апстенку стучать?

> В какую апстенку стучать?

Сначала научись корректно выражать свои мысли - чтобы было понятно не тебе, а тем, к кому обращаешся.

Из того что ты написал сложно понять что вообще происходит, но у меня возникло смутное подозрение, что ты тупо копируешь URL с страницы и вставляешь в строку. Так вот, "%0D%0A" - это ровно шесть символов, из них никакой не подходит под '\r' или '\n'.

'\r' - это два символа пока ты вводишь в текстовом редакторе, при компиляции он превращается в один байт непечатного символа - именно поэтому чтобы ввести обратный слеш тебе его надо вводить дважды - '\\'. Надеюсь, суть вопроса в этом состояла. BTW, для простоты считаем что символы в ASCII кодировке

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

>...но у меня возникло смутное подозрение, что ты тупо копируешь URL с страницы и вставляешь в строку.

Нет, урл обрабатывается внутри программы - некая функция принимает весь урл, обрабатывает и возвращает часть(тип string) урла, далее вышеуказанная функция принимает эту строку

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

да, но в URL у тебя не могут быть символы '\r' и '\n' - потому как в C/C++ строке они у тебя реально непечатные; именно для этого их перекодируют URL в "%0D" чтобы превратить в печатные, которые человек может ввести с клавы: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

т.е. тебе надо или самому декодировать такие символы назад, либо же менять "%0D" на то что тебе нужно.

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