Is een nieuwe regel = \n OF \r\n?

Ik heb gezien dat veel ontwikkelaars verschillende methoden gebruiken om een tekenreeks te splitsen door nieuwe regels, maar ik weet niet wat de juiste is: \r\nOF \nalleen?


Antwoord 1, autoriteit 100%

\nwordt gebruikt voor Unix-systemen (inclusief Linux en OSX).

\r\nwordt voornamelijk gebruikt op Windows.

\rwordt gebruikt op echt oude Macs.

De constante

PHP_EOLwordt gebruikt in plaats van deze tekens voor overdraagbaarheid tussen platforms.


Antwoord 2, autoriteit 35%

Het gegeven antwoord is verre van compleet. In feite is het zo verre van compleet dat het de lezer doet geloven dat dit antwoord afhankelijk is van het besturingssysteem, terwijl dat niet het geval is. Het is ook niet iets dat programmeertaalafhankelijk is (zoals sommige commentatoren hebben gesuggereerd). Ik ga meer informatie toevoegen om dit duidelijker te maken. Laten we eerst de lijst met huidigenieuwe regelvariaties geven (zoals in, wat ze sinds 1999 zijn):

  • \r\nwordt alleen gebruikt op Windows Kladblok, de DOS-opdrachtregel, het grootste deel van de Windows API en in sommige (oudere) Windows-apps.
  • \nwordt gebruikt voor alle andere systemen, applicaties en internet.

Je zult merken dat ik de meeste Windows-apps in de \n-groep heb geplaatst, wat enigszins controversieel kan zijn, maar voordat je het niet eens bent met deze verklaring, pak een UNIX-geformatteerd tekstbestand en probeer het in 10 webvriendelijke Windows-applicaties naar keuze (die niet worden vermeld in mijn uitzonderingen hierboven). Welk percentage van hen deed het prima? U zult zien dat ze (praktisch) allemaal automatische detectie van regeleindes implementeren of gewoon \ngebruiken, want hoewel Windows \r\ngebruikt, gebruikt internet \n. Daarom is het de beste gewoonte voor toepassingen om alleen \nte gebruiken als u wilt dat uw uitvoer internetvriendelijk is.

PHP definieert ook een teken voor een nieuwe regel met de naam PHP_EOL. Deze constante wordt ingesteld op de OS-specifieke newline-string voor de machine waarop PHP draait (\r\nvoor Windows en \nvoor al het andere). Deze constante is niet erg handig voor webpagina’s en moet worden vermeden voor HTML-uitvoer of voor het schrijven van de meeste tekst naar bestanden. Het wordt ZEER handig wanneer we overgaan op opdrachtregeluitvoer van PHP-toepassingen, omdat het uw toepassing in staat zal stellen om op een consistente manier naar een terminalvenster te gaan in alle ondersteunde besturingssystemen.

Als je wilt dat je PHP-applicaties werken vanaf elke server waarop ze zijn geplaatst, zijn de twee belangrijkste dingen om te onthouden dat je altijd gewoon \nmoet gebruiken, tenzij het terminaluitvoer is (in dat geval u gebruikt PHP_EOL) enu moet ook ALTIJD /gebruiken voor uw padscheidingsteken (niet \).

De nog langere uitleg:

Een toepassing kan ervoor kiezen om de regeleindes te gebruiken die het wil, ongeacht de standaard regeleindstijl van het besturingssysteem. Als ik wil dat mijn teksteditor elke keer dat hij een punt tegenkomt een nieuwe regel afdrukt, is dat niet moeilijker dan het gebruik van de \nom een nieuwe regel weer te geven, omdat ik de tekst interpreteer zoals ik hem toch weergeef. IOW, ik ben aan het prutsen met het meten van de breedte van elk teken zodat het weet waar het volgende moet worden weergegeven, dus het is heel eenvoudig om een verklaring toe te voegen die zegt dat als het huidige teken een punt is, voer dan een nieuwe regelactie uit (of als het is a \nen geef dan een punt weer).

Behalve de nul-terminator is geen tekencode heilig en als je een teksteditor of viewer schrijft, ben je verantwoordelijk voor het vertalen van de bits in je bestand naar glyphs (of regelterugloop) op het scherm. Het enige dat een besturingsteken zoals de nieuwe regel onderscheidt van andere tekens, is dat de meeste lettertypesets ze niet bevatten (wat betekent dat ze geen visuele weergave beschikbaar hebben).

Dat gezegd hebbende, als u op een hoger abstractieniveau werkt, maakt u waarschijnlijk niet uw eigen tekstvakbesturingselementen. Als dit het geval is, zit je vast aan het einde van de regel dat dat besturingselement je ter beschikking stelt. Zelfs in dit geval is het eenvoudig om automatisch de stijl van het einde van de regel van een tekenreeks te detecteren en de conversie uit te voeren voordat u uw tekst in het besturingselement laadt en het vervolgens ongedaan te maken wanneer u van dat besturingselement leest. Dit betekent dat als je een desktop applicatie-ontwikkelaar bent en je applicatie \nniet herkent als een nieuwe regel, het geen erg vriendelijke applicatie is en je echt geen excuus hebt omdat het dat niet is. moeilijk om het op de goede manier te doen. Het betekent ook dat degene die Kladblok heeft geschreven zich moet schamen, want het is echt heel gemakkelijk om veel beter te doen en zoveel mensen lijden eronder door het elke dag te gebruiken.


Antwoord 3, autoriteit 5%

Als je in PHP programmeert, is het handig om regels te splitsen per \nen vervolgens trim()elke regel (mits je niet om witruimte geeft) om je hoe dan ook een “schone” regel te geven.

foreach($line in explode("\n", $data))
{
    $line = trim($line);
    ...
}

Antwoord 4

Voor php zou \n voor jou moeten werken!

http://php.net/manual/en/language.types. string.php

Other episodes