Może się to wydawać oszustwem, ale zapewniam, że tak nie jest - przeszukiwałem zarówno SO, jak i resztę sieci, aby znaleźć odpowiedź na mój problem i ostatecznie znajdowałem te same niewystarczające „rozwiązania” w kółko. Tak czy inaczej, oto jest:
Zapisuję dane wejściowe użytkownika z obszaru tekstowego do bazy danych MySQL (w środowisku WordPress, ale uważam, że nie powinno to mieć znaczenia dla tego problemu). Jest później pobierany z bazy danych i pokazywany administratorom w zapleczu witryny. Problem pojawia się, gdy użytkownicy przesyłają tekst z podziałem wiersza (tj. Naciskają klawisz Enter).
Przykładowy ciąg może wyglądać następująco:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!
Greetings,
Bill
W ciągu nie ma znaków końca wiersza („\ n”, „\ r” itp.).
Używam nl2br()
go do generowania danych wyjściowych HTML, ale to nie wystarczy. Wynik to:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
Który, o ile rozumiem, jest oczekiwanym nl2br()
rezultatem, ponieważ wstawia tagi i nie ma w pierwszej kolejności zastępować podziałów wierszy?
Jednak format, którego potrzebuję, byłby następujący:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill
Gdyby ciąg zawierał znaki EOL, takie jak „\ n”, uderzyłbym go albo str_replace()
albo preg_replace()
i skończyłbym z tym, ale nie mam pojęcia, którą igłę podać do którejkolwiek z tych funkcji, jeśli nie ma tam żadnych znaków na pierwszym miejscu.
Mogę ręcznie uzyskać dostęp do odpowiedniego pola w bazie danych, naciskać Backspace przy każdym podziale wiersza i to, co chcę później zrobić ze stringiem, działa. Więc wiem, że potrzebuję powyższego formatu.
Odpowiedzi:
Powinieneś być w stanie zastąpić go preg, który usuwa wszystkie nowe linie i powroty karetki. Kod to:
Mimo że
\n
znaki się nie pojawiają, jeśli otrzymujesz powrót karetki, jest tam niewidoczny znak. Wymiana preg powinna je złapać i naprawić.źródło
/\r|\n|\r\n/
Rozwiązanie Bena jest dopuszczalne, ale str_replace () jest znacznie szybsze niż preg_replace ()
Zużywając mniej mocy procesora, redukuje światową emisję dwutlenku węgla.
źródło
źródło
To dlatego, że w
nl2br()
ogóle nie usuwa nowych linii.Użyj
str_replace
zamiast tego:źródło
Możesz także użyć przycinania PHP
źródło
Aby działać poprawnie również w systemie Windows, sugerowałbym użycie
"\r\n"
- dla systemu Windows,"\r"
- dla komputerów Mac i"\n"
- dla systemu Linuxźródło
\r
i\n
zostaną usunięte w ciągu, dlaczego nie miałoby to mieć miejsca w przypadku tych, które następują bezpośrednio po sobie?\r\n
na Windowsie i nie działało na Linuksie.\r\n
FIRST pomogłoby, ponieważ oznacza to jeden przecinek zamiast dwóch dla każdej części, jeśli ten podział wiersza\r\n
najpierw wymieniamy , potem zastępujemy\r
i\n
zredagowałem odpowiedź.\r
i\r
nie ma potrzeby usuwania\r\n
, możesz użyć użytkownika,str_replace(array("\r","\n"), "", $buffer);
aby uzyskać ten sam wynik.str_replace (PHP_EOL, null, $ str);
źródło
Coś bardziej funkcjonalnego (łatwego w użyciu w dowolnym miejscu):
Używanie PHP_EOL jako parametru zastępującego wyszukiwanie jest również dobrym pomysłem! Sława.
źródło
Alternatywne wbudowane: przycinanie ()
Jest tam, aby usuwać podziały wierszy z różnych rodzajów plików tekstowych, ale nie obsługuje html.
źródło
Używam 3 wierszy do wykonania tej pracy, więc traktuj $ s jako swoje „rzeczy” ...
źródło