PHP str_replace работает неправильно

Я использую str_replace, и он работает неправильно. У меня есть текстовая область, ввод которой отправляется с формой. Когда данные получены сервером, я хочу изменить новые строки на «,».

$teams = $_GET["teams"];
$teams = str_replace("\n",",",$teams);
echo $teams;

Странно, я получаю следующий результат

Челси

,настоящий

,Барселона

вместо Челси,Реал,Барселона.

Что случилось?


person Omar Abid    schedule 06.09.2010    source источник


Ответы (4)


Чтобы расширить ответ Waage, вы можете использовать массив для замены обоих наборов символов.

$teams = str_replace(array("\r\n", "\n"),",",$teams);
echo $teams;

Это должно правильно обрабатывать оба элемента, так как один \n действителен и не будет пойман, если вы просто замените \r\n

person Jimithus    schedule 06.09.2010
comment
trim() удаляет пробельные символы только в начале и конце строки, а не в середине. - person BoltClock; 07.09.2010
comment
Да, до меня дошло, что он делал это не до конца строки :) Изменено, чтобы быть лучшим ответом! - person Jimithus; 07.09.2010
comment
Немного запутался, в чем разница между двумя ответами? - person Omar Abid; 07.09.2010
comment
Ничего особенного, мой просто показывает код для преобразования \r\n И \n в ,. Я думаю, что waage намекал на это, я просто показал код для этого. - person Jimithus; 07.09.2010
comment
Ах, старые проблемы с возвратом каретки/переводом строки. Вы могли бы подумать, что в 2016 году мы бы уже прошли это... - person War10ck; 25.07.2016

Попробуйте заменить "\r\n" вместо "\n"

person Ólafur Waage    schedule 06.09.2010

Я бы обрезал текст и заменил все последовательные символы CR/LF запятой:

$text = preg_replace('/[\r\n]+/', ',', trim($text))
person Matthew    schedule 07.09.2010

У меня была такая же проблема, но я нашел другой ответ, поэтому решил поделиться, если это кому-то поможет.

Проблема заключалась в том, что я хотел заменить \n на <br/> для печати в HTML. Простое изменение, которое я должен был сделать, заключалось в том, чтобы избежать обратной косой черты в str_replace("\n","<br>",($text)) следующим образом:

str_replace("\\n","<br>",($text))
person Steve James    schedule 25.07.2016