Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jaki powinien być znak nowej linii w text/plain?
Forum PHP.pl > Forum > Przedszkole
SmokAnalog
Stosunkowo często używam Content-Type: text/plain, głównie dla moich własnych narzędzi. Tak się zastanawiam - czy jest jakiś standard jaki powinien być znak nowej linii dla zwykłego tekstu wysyłanego do przeglądarki? Jak jeszcze byłem lamusem, używałem do tego celu PHP_EOL, co jest absolutną bzdurą, bo przecież odpowiedź do przeglądarki nie ma nic wspólnego z systemem używanym na serwerze. Teraz używam \n, ale być może jakieś standardy zalecają \r\n?

Oczywiście działa jedno i drugie. Pytam jako pedant. smile.gif
trzczy
windowsowy \r\n
https://www.ietf.org/rfc/rfc2046.txt
Cytat
RFC 2046 Media Types November 1996


4.1.1. Representation of Line Breaks

The canonical form of any MIME "text" subtype MUST always represent a
line break as a CRLF sequence.
SmokAnalog
To jest standard dotyczący poczty, a nie przeglądarek.
trzczy
https://en.wikipedia.org/wiki/MIME
HTTP go używa.
Cytat
Although MIME was designed mainly for SMTP, the content types defined by MIME standards are also of importance in communication protocols outside email, such as HTTP for the World Wide Web. Servers insert the MIME header at the beginning of any Web transmission. Clients use this content type or media type header to select an appropriate viewer application for the type of data the header indicates. Some of these viewers are built into the Web client or browser (for example, almost all browsers come with GIF and JPEG image viewers as well as the ability to handle HTML files).
darko
"\r\n" Nie masz poważniejszych, prawdziwych problemów ? dry.gif
SmokAnalog
@darko rozumiem, że jesteś z tych, których zadowala "że działa" (klepacz)? tongue.gif

@trzczy no niech będzie, że tak smile.gif Nie znalazłem innego źródła, które by twierdziło cokolwiek na temat nowych linii w text/plain dla przeglądarki, więc pewnie jest to ten sam standard.
Pyton_000
MIME jest MIME, nie ważne gdzie...
trzczy
Jak szukać jakiejś bardziej konkretnej podkładki, to jeszcze to https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
Cytat
Headers can be grouped according to their contexts:

General header: Headers applying to both requests and responses but with no relation to the data eventually transmitted in the body.
Request header: Headers containing more information about the resource to be fetched or about the client itself.
Response header: Headers with additional information about the response, like its location or about the server itself (name and version etc.).
Entity header: Headers containing more information about the body of the entity, like its content length or its MIME-type.


Cytat
Content negotiation

Accept
Informs the server about the types of data that can be sent back. It is MIME-type.

Accept-Charset
Informs the server about which character set the client is able to understand.
Accept-Encoding
Informs the server about the encoding algorithm, usually a compression algorithm, that can be used on the resource sent back.
Accept-Language
Informs the server about the language the server is expected to send back. This is a hint and is not necessarily under the full control of the user: the server should always pay attention not to override an explicit user choice (like selecting a language in a drop down list).
SmokAnalog
Cytat(Pyton_000 @ 25.01.2018, 14:28:19 ) *
MIME jest MIME, nie ważne gdzie...

No właśnie niby tak, ale czy na pewno typ MIME implikuje wszystkie cechy samej treści? Innymi słowy, czy MIME to bardziej standard czy etykieta?

@trzczy tutaj akurat nie za bardzo widzę związek z tematem smile.gif
darko
Cytat(SmokAnalog @ 25.01.2018, 13:48:50 ) *
@darko rozumiem, że jesteś z tych, których zadowala "że działa" (klepacz)? tongue.gif

Nie oceniaj pochopnie, poza tym - nie rozumiem Cię, ani Twoich problemów.
SmokAnalog
Mój „problem” polega ma tym, że interesują mnie standardy i to, jak działa web od wewnątrz. Uważam, że każdy sensowny programista powinien się interesować takimi niuansami.
darko
Dostałeś już odpowiedzi na nurtujące Cię problemy dotyczące "standardów" zapisu nowej linii. Nie widzę dalszego sensu drążenia tematu, ale co taki klepacz kodu, jak ja może na ten temat wiedzieć...
SmokAnalog
Przecież o nic Cię nie pytam tongue.gif
Pyton_000
@darko powiem Ci że akurat @Smok na forum ma jednak co nieco mądrego do powiedzenia więc nie traktowałbym go jak debila. Popieram drążenie tematu bo sam dzięki temu wwiem jak pewne rzeczy działają i dla czego co pozwala na lepsze zrozumienie pewnych zagadnień.
darko
Nie twierdzę, że jest inaczej i nikogo nie traktuje, jak debila. Drążcie sobie, jak działa new line.
SmokAnalog
@darko mam madzieję, że się nie obraziłeś za te złośliwe żarty smile.gif
darko
Do tego stopnia że wklejam Wam link do artykułu, z 2006 roku, ale wydaje się być ciągle aktualny: http://www.onlamp.com/pub/a/onlamp/2006/08...g-newlines.html
SmokAnalog
Wszystko fajnie, tylko w tym artykule nie ma odpowiedzi na moje pytanie.
darko
Abstrahując od tego, że pytanie jest źle postawione, ponieważ plain text wcale nie musi zawierać znaków kontrolnych, aby spełniał definicję plain-textu
Cytat
It may also include a limited number of characters that control simple arrangement of text, such as line breaks or tabulation characters.

[źródło:] https://en.wikipedia.org/wiki/Plain_text
czyli - może, ale nie musi zawierać oneeyedsmiley02.png

Zarówno sposób zapisu, jak i interpretacji tego znaku zależy od użytego standardu kodowania (znaków). I właśnie te standardy opisują, jakiej sekwencji należy użyć, aby znak nowej linii był poprawnie interpretowany.
Podsumowując: nie ma jednej, jednolitej interpretacji, która obowiązuje wszędzie, natomiast są odpowiednie standardy dotyczące poprawnego kodowania znaków. Tabela reprezentacji znaków, akapit:
Cytat
Representations in different character encoding specifications

https://en.wikipedia.org/wiki/Newline

Jak widać, inaczej jest to zapisane w ASCII, inaczej w Unicode, jeszcze inaczej interpretują np. 8-bitowe Atari czy ZX Spectrum zakochany.gif

sekret.gif Można to porównać do np. języków europejskich, gdzie piwo to zarówno beer, jak i: cerveza, pivo, piwo, μπυρα, alut, öl itd. itp. W zależności od kraju, w którym się znajdujesz - chodzi o to, żeby kupić piwo, a jak to zapisać to już jest sprawa wtórna i zmartwienie spragnionego melanżownika. Pani w sklepie zrozumie smile.gif
SmokAnalog
Cytat(darko @ 28.01.2018, 13:46:40 ) *
Abstrahując od tego, że pytanie jest źle postawione, ponieważ plain text wcale nie musi zawierać znaków kontrolnych, aby spełniał definicję plain-textu

To co piszesz jest nielogiczne. Co to ma w ogóle do rzeczy, że nie musi zawierać? Pytam czy jest jakiś standard zapisu znaku nowej linii. Ktoś, kto sztywno trzyma się zasad, teoretycznie mógłby inaczej wtedy zinterpretować niewłaściwy znak nowej linii, czyli na przykład nie wyświetlić wcale przejścia do nowej linii (jeśli standard to \r\n, a my użyjemy \n) lub wyświetlić jakiś babolek (w odwrotnej sytuacji).

Jeśli jest tak, że nie ma na to standardu i plain text to wolna amerykanka, to jest to odpowiedź na moje pytanie, a nie źle postawione pytanie.

Jeśli pytam czy kwiaty należy podlewać wodą źródlaną czy mineralną, a odpowiedź to "obojętnie, bo obie identycznie spełnią swoje zadanie", to pytanie nie jest źle postawione.

Nielogiczna jest Twoja odpowiedź, bo przeglądarka to bardzo specyficzny twór i niekoniecznie musi odzwierciedlać system, na którym siedzi. Może mieć własne, ustalone przez W3C czy innego czorta, standardy.
darko
Cytat(SmokAnalog @ 28.01.2018, 19:00:44 ) *
... Ktoś, kto sztywno trzyma się zasad, teoretycznie mógłby inaczej ...wtedy

Zasady, na które się powołujesz i o której pytasz to standardy kodowana znaków. Chodziło mi to, że standardy raczej nie opisują czegoś, co jest opcjonalne.
Cytat(SmokAnalog)
przeglądarka to bardzo specyficzny twór i niekoniecznie musi odzwierciedlać system, na którym siedzi. Może mieć własne, ustalone przez W3C czy innego czorta, standardy

To Ty wysyłasz do przeglądarki w nagłówku content-type i charset i to Ty wymuszasz odpowiednie kodowanie, a interpretacja tego leży już po stronie przeglądarki klienta i nie powinna Cię martwić obsługa tego, bo to już od Ciebie nie zależy. Ty swoje zrobiłeś wysyłając odpowiedni charset i poprawnie kodując treść wiadomości.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.