Hlavním problémem, který máte se všemi variantami, které jste vyzkoušeli, je to, že obě \n
a \r
jsou znaky escape, které jsou uvozeny pouze tehdy, když je použijete v řetězci s dvojitými uvozovkami .
V PHP je velký rozdíl mezi '\r\n'
a "\r\n"
. Všimněte si jednoduchých uvozovek v prvním a dvojitých uvozovek v druhém.
Takže:'\r\n'
výsledkem bude čtyřznakový řetězec obsahující lomítko, 'r', další lomítko a 'n', zatímco "\r\n"
bude obsahovat dva znaky, kterými jsou znaky nového řádku a návrat vozíku.
Takže přímá odpověď na vaši otázku je, že musíte použít druhý z příkladů, které jste uvedli v otázce, ale s dvojitými uvozovkami místo jednoduchých uvozovek:
$text = str_replace("\r\n",'', $text);
Stojí za zmínku, že tím odstraníte vše nové řádky ze vstupu a nahradit je ničím. Pokud je ve vstupu více než jeden nový řádek, budou všechny odstraněny. Aniž bych věděl více o vaší aplikaci, nevím, jestli je to to, co chcete, ale tady jsou některé myšlenky:
-
Pokud chcete pouze odstranit prázdné řádky (a další mezery) z konce vstupního řetězce, můžete použít
trim()
místo toho. -
Pokud chcete zachovat formátování pro výstup do HTML, pak
nl2br()
funkce vám pomůže. Pokud chcete výstup do HTML bez formátování, možná je nebudete muset odstraňovat, protože prohlížeč nevykreslí konce řádků ze znaků \n. -
Pokud nahradíte nové řádky ničím, jako ve vašem příkladu, poslední slovo prvního řádku nyní přejde přímo do prvního slova druhého řádku a tak dále. Můžete je raději nahradit znakem mezery než ničím.
-
Je možné, že uživatelé mohou zadat vstup pouze pomocí
\n
bez odpovídající\r
nebo naopak (může to být způsobeno jejich operačním systémem nebo prohlížečem, záměrným hackem nebo řadou dalších důvodů). Pokud chcete nahradit vše V případě obou těchto znaků by spolehlivější způsob, jak to udělat, bylo nahradit je jednotlivě, spíše než spoléhat na to, že jsou vedle sebe.str_replace()
umožňuje to provést jejich zadáním v poli. Můžete také použítstrtr()
nebopreg_replace()
k dosažení stejného cíle.
Doufám, že to pomůže.