str_replace после nl2br

telesar

Новичок
str_replace после nl2br

Известно, что nl2br не убирает символы перевода строки, а лишь вставляет перед ними <br />.
Так как мне переводы строк мешают, я после nl2br делаю со строкой так:
PHP:
$stroka=str_replace(array("\r\n", "\n", "\r"), '', $stroka));
И все вроде замечательно.
Но вот чего я никак не пойму: если в $stroka руками вбить любую из этих последовательностей ("\r\n" или "\n" или "\r"), то они остаются, а не заменяются на пустоту. Почему так? На каком-то этапе обратный слеш экранируется?

ЗЫ: Не знаю, важно ли это, но $stroka у меня берется из MySQL.
 

Линка

Новичок
telesar
$pattern='\\r';
$replacement=' ';
$msg = str_replace($pattern,$replacement,$msg);
Все заменяется
 

telesar

Новичок
Спасибо, Линка !
Только мне не нужно их заменять, меня очень интересует вопрос на каком этапе и почему обратные слеши проэкранировались?
 

Фанат

oncle terrible
Команда форума
а с чего ты взял, что они проэкранировались?
с чего ты взял какие-то там "этапы"?
при чём здесь вообще твой код?
при чём тут str_replace после nl2br?

что ты в строку "вбиваешь" - то в ней и лежит.
вбиваешь перевод строки - лежит перевод
вбиваешь пару символов \r - лежит эта пара.

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

telesar

Новичок
Автор оригинала: Фанат
вбиваешь перевод строки - лежит перевод
вбиваешь пару символов \r - лежит эта пара.

вот и разбирайся, что ты "вбиваешь".
прочитав предварительно дрокументацию
Вау, то есть, как я понял пара символов \r и перевод строки - это не одно и то же!

Плиз, Фанат, подскажи, какую документацию почитать, я обязательно и с удовольствием прочитаю.
 

FreeSpace

Чукча-читатель
Вот так:
$var = "\r" - возврат каретки
$var = "\\r" - два символа
$var = '\r' - два символа

а если ты вообще в HTML-ной форме вбиваешь символы \r, то они, конечно же, не обрабатываются специальным образом, а так и остаются двумя символами, но не переводом каретки.
 

telesar

Новичок
Автор оригинала: FreeSpace а если ты вообще в HTML-ной форме вбиваешь символы \r, то они, конечно же, не обрабатываются специальным образом, а так и остаются двумя символами, но не переводом каретки.
Ну почему ?!
Ну чем они отличаются то?
 

telesar

Новичок
Спасибо, SelenIT !
Только я, наверное, совсем тупой...
Читал я твою ссылку, и сейчас еще раз прочитал.
Я понимаю, что PHP интерпретирует управляющие последовательности в зависимости от того, в какие кавычки они заключены.
Но ведь у меня вообще нет никаких кавычек.
Т.е., грубо говоря,

$stroka=$_POST['stroka'];

Как эта упр. последовательность будет интерпретирована?
 

telesar

Новичок
Автор оригинала: Фанат
echo $stroka;
Если в форме набрать любую упр. последовательность, то

echo $_POST['stroka'];

показывает, что обратный слеш проэкранирован другим обратным слешем.
И что?
 

FreeSpace

Чукча-читатель
Управляющие последовательности интерпретируются только в исходном тексте программы.
При чтении из файла, получении по протоколу HTTP и прочим они не интерпретируются вообще.
 

Фанат

oncle terrible
Команда форума
И то, что к переводу строк это не имеет никакого отношения.
 

telesar

Новичок
Автор оригинала: Фанат
И то, что к переводу строк это не имеет никакого отношения.
А по-моему как раз имеет.
То есть, если в HTML-форме набрать \n, то получивший эту переменную php-скрипт не интерпретирует эти два символа как перевод строки из-за того, что обратный слеш оказался проэкранирован.
А если набрать именно перевод строки, то ничего проэкранировано не будет, и скрипт, естественно, увидит упр. последовательность.
 

Profic

just Profic (PHP5 BetaTeam)
Феерический топик (с) Фанат :)
При чтении из файла, получении по протоколу HTTP и прочим они не интерпретируются вообще.
И magic_quotes_gpc тут совершенно не при чем.
 

telesar

Новичок
Profic
И magic_quotes_gpc тут совершенно не при чем.
Однако...
Где ж ты раньше был?
Только не надо теперь говорить, что я один лоханулся: про magic_quotes_gpc никто почему то не вспомнил.
 

_RVK_

Новичок
telesar
говори, не говори, а у тебя каша в голове. Символы перевода строки и возврата каретки это символы #13 и #10 соответственно. А символы "\", "n", "r" это символы #92, #110, #114 соответственно.
Просто если PHP встречает в строке экранирующий символ а за ним букву, он вместо тебя заменяет n или r или t на символ с сответствующим кодом. Но он делает это только в строках, в момент интерпетации кода. Эти пары символов в переменных пхп не заменяет. Он делает это только перед присвоением

а magic_quotes_gpc не вспомнили, потому что он здесь абсолютно не причем. Удваивает он слеш или не удваивает обсолютно ни на что не влияет.
 
Сверху