Het grootste probleem dat je hebt met alle variaties die je hebt geprobeerd, is dat zowel \n
en \r
zijn escape-tekens die alleen escaped zijn als je ze in een tekenreeks met dubbele aanhalingstekens gebruikt .
In PHP is er een groot verschil tussen '\r\n'
en "\r\n"
. Let op de enkele aanhalingstekens in de eerste en dubbele aanhalingstekens in de tweede.
Dus:'\r\n'
resulteert in een tekenreeks van vier tekens die een schuine streep, een 'r', een andere schuine streep en een 'n' bevat, terwijl "\r\n"
zal twee tekens bevatten, namelijk de nieuwe regel en de regelteruglooptekens.
Het directe antwoord op je vraag is dus dat je het tweede voorbeeld moet gebruiken dat je in de vraag hebt gegeven, maar met dubbele aanhalingstekens in plaats van enkele aanhalingstekens:
$text = str_replace("\r\n",'', $text);
Het is de moeite waard om erop te wijzen dat hiermee alle . wordt verwijderd nieuwe regels van de invoer en vervang ze door niets. Als er meer dan één nieuwe regel in de invoer is, worden deze allemaal verwijderd. Zonder meer te weten over uw aanvraag, weet ik niet of dit is wat u wilt, maar hier zijn enkele gedachten:
-
Als u alleen lege regels (en andere witruimte) aan het einde . wilt verwijderen van de invoerreeks, kunt u de
trim()
. gebruiken functie in plaats daarvan. -
Als u de opmaak voor uitvoer naar HTML wilt behouden, dan is de
nl2br()
functie zal u helpen. Als u wilt uitvoeren naar HTML zonder de opmaak, hoeft u ze mogelijk niet te verwijderen, omdat de browser geen regeleinden van \n tekens weergeeft. -
Als u nieuwe regels door niets vervangt, zoals in uw voorbeeld, loopt het laatste woord van de eerste regel nu rechtstreeks in het eerste woord van de tweede regel, enzovoort. Misschien geeft u er de voorkeur aan ze te vervangen door een spatie in plaats van niets.
-
Het is mogelijk dat gebruikers de invoer kunnen indienen met alleen
\n
zonder de overeenkomende\r
, of omgekeerd (dit kan te wijten zijn aan hun besturingssysteem of browser, of een opzettelijke hack, of een aantal andere redenen). Als u alle wilt vervangen gevallen van beide karakters, zou een betrouwbaardere manier om dit te doen zijn om ze afzonderlijk te vervangen, in plaats van erop te vertrouwen dat ze naast elkaar staan.str_replace()
stelt u in staat dit te doen door ze in een array op te geven. Je kunt ookstrtr()
. gebruiken ofpreg_replace()
om hetzelfde doel te bereiken.
Ik hoop dat dat helpt.