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ą
\nbez pasującego\rlub 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.