Основният проблем, който имате с всички варианти, които сте опитвали, е, че и двете \n
и \r
са escape знаци, които се екранират само когато ги използвате в низ с двойни кавички .
В PHP има голяма разлика между '\r\n'
и "\r\n"
. Обърнете внимание на единичните кавички в първия и двойните кавички във втория.
И така:'\r\n'
ще доведе до низ от четири знака, съдържащ наклонена черта, 'r', друга наклонена черта и 'n', докато "\r\n"
ще съдържа два знака, като това са новият ред и символите за връщане на карета.
Така че директният отговор на въпроса ви е, че трябва да използвате втория от примерите, които сте дали във въпроса, но с двойни кавички вместо единични:
$text = str_replace("\r\n",'', $text);
Струва си да се отбележи, че това ще премахне всички нови редове от входа и ги заменете с нищо. Ако има повече от един нов ред във входа, всички те ще бъдат премахнати. Без да знам повече за приложението ви, не знам дали това е, което искате, но ето някои мисли:
-
Ако искате да премахнете само празни редове (и друго бяло пространство) от края от входния низ, можете да използвате
trim()
функция вместо това. -
Ако искате да запазите форматирането за извеждане в HTML, тогава
nl2br()
функцията ще ви помогне. Ако искате да изведете в HTML без форматиране, тогава може да не е необходимо да ги премахвате, тъй като браузърът няма да изобразява прекъсвания на редове от \n символи. -
Ако замените новите редове с нищо, според вашия пример, последната дума от първия ред вече ще работи директно в първата дума на втория ред и т.н. Може да предпочетете да ги замените с интервал, вместо с нищо.
-
Възможно е потребителите да изпращат въведените данни само с
\n
без съответстващия\r
, или обратно (това може да се дължи на тяхната ОС или браузър, или на умишлен хак, или на редица други причини). Ако искате да замените всички екземпляри и на двата знака, по-надежден начин да го направите би бил да ги замените поотделно, вместо да разчитате, че са един до друг.str_replace()
ви позволява да направите това, като ги посочите в масив. Можете също да използватеstrtr()
илиpreg_replace()
за постигане на същата цел.
Надявам се това да помогне.