Główny problem ze wszystkimi wypróbowanymi odmianami polega na tym, że zarówno \n
i \r
są znakami ucieczki, które są zamieniane tylko wtedy, gdy używasz ich w łańcuchu z podwójnym cudzysłowem .
W PHP istnieje duża różnica między '\r\n'
i "\r\n"
. Zwróć uwagę na pojedyncze cudzysłowy w pierwszym i podwójne cudzysłowy w drugim.
A więc:'\r\n'
da w wyniku czteroznakowy ciąg zawierający ukośnik, „r”, inny ukośnik i „n”, podczas gdy "\r\n"
będzie zawierać dwa znaki, które są znakami nowej linii i powrotu karetki.
Tak więc bezpośrednią odpowiedzią na twoje pytanie jest to, że musisz użyć drugiego z przykładów podanych w pytaniu, ale z podwójnymi cudzysłowami zamiast pojedynczych:
$text = str_replace("\r\n",'', $text);
Warto zaznaczyć, że spowoduje to usunięcie wszystkich nowe linie z wejścia i zastąp je niczym. Jeśli na wejściu pojawi się więcej niż jedna nowa linia, wszystkie zostaną usunięte. Nie wiedząc więcej o Twojej aplikacji, nie wiem, czy tego chcesz, ale oto kilka przemyśleń:
-
Jeśli chcesz tylko usunąć puste wiersze (i inne białe znaki) z końca ciągu wejściowego, możesz użyć
trim()
zamiast tego. -
Jeśli chcesz zachować formatowanie danych wyjściowych do HTML, to
nl2br()
funkcja pomoże. Jeśli chcesz drukować w formacie HTML bez formatowania, możesz nie musieć ich usuwać, ponieważ przeglądarka nie renderuje podziałów wierszy ze znaków \n. -
Jeśli zastąpisz nowe wiersze niczym, jak na twoim przykładzie, ostatnie słowo pierwszego wiersza będzie teraz przechodzić bezpośrednio do pierwszego słowa drugiego wiersza i tak dalej. Być może wolisz zastąpić je spacją, a nie niczym.
-
Możliwe, że użytkownicy mogą przesyłać dane wejściowe tylko za pomocą
\n
bez pasującego\r
lub odwrotnie (może to być spowodowane ich systemem operacyjnym, przeglądarką, celowym włamaniem lub kilkoma innymi przyczynami). Jeśli chcesz zastąpić wszystkie w przypadku obu tych postaci, bardziej niezawodnym sposobem na to byłoby zastąpienie ich pojedynczo, zamiast polegać na tym, że znajdują się obok siebie.str_replace()
pozwala to zrobić, określając je w tablicy. Możesz także użyćstrtr()
lubpreg_replace()
osiągnąć ten sam cel.
Mam nadzieję, że to pomoże.