Avatar billede Mik2000 Professor
24. oktober 2011 - 21:22 Der er 11 kommentarer og
1 løsning

HTML/PHP - \r\n problem

Hvis jeg har et normalt felt
<textarea name="textarea" id="textarea" cols="45" rows="5"></textarea>

... og jeg i det skriver noget og laver linjeskift

... og derefter henter det med:
$var = mysql_real_escape_string($_POST['textarea'])

Hvorfor kommer der så synlige \r\n i den tekst der hentes ved hvert linjeskift?
Kan man gøre noget for at undgå dette uden man skal til at lave ekstra kode hver gang man henter noget som f.eks. nl2br eller str_replace mv.
Avatar billede olebole Juniormester
24. oktober 2011 - 21:54 #1
<ole>

Sådan skal det være. Det, du skriver i et textarea, er rå tekst - og der består linjeskift af '\r\n', '\r' eller '\n' - og et par mere sjældne versioner - alt efter styresystem.

Skal du mærke en tekst op med HTML, må den slags blanktegn i koden ikke vises. Skal man bruge synlige linjeskift i browserens interface, bruges <br>.

Da tekst fra textareas skal kunne bruges til alle mulige formål, skal den 'oversættes', inden du kan bruge den som HTML. Det er der ikke noget automatik til

/mvh
</bole>
Avatar billede Mik2000 Professor
24. oktober 2011 - 23:55 #2
Det der bare er mærkeligt er at der ikke har været noget før hvor det var nødvendigt. Det er kommet efter opgradering til PHP 5,3

Men hvad skal så bruges og hvornår for at gøre det korrekt og undgå der kommer \r\n i alle tekster

Jeg skal hente fra felt, gemme i db og vise på en side
Avatar billede olebole Juniormester
25. oktober 2011 - 00:08 #3
Så gemmer du teksten med '\r\n'. Når du skal vise teksten, så kører du den igennem nl2br. Det er sådan, teknologien er indrettet - og det er det, alle andre på WWW gør
Avatar billede olebole Juniormester
25. oktober 2011 - 00:14 #4
- og der er intet sket i den henseende i PHP 5.3. Det handler slet ikke om sproget, men om platformen/styresystemet.

Siden jeg i 1998 begyndte at bruge PHP, har Windows brugt '\r\n' som linjeskift, og Unix (og derfor Linux) har brugt '\n'. Det har aldrig givet problemer med udskrift.

Jeg ved godt, du har stillet spørgsmålet flere gange, men jeg forstår stadig ikke, hvad dit problem består i. Såvidt jeg ved er der heller inegn andre, der har forstået det  =)
Avatar billede Mik2000 Professor
25. oktober 2011 - 01:55 #5
Hehe det der var mærkeligt var at den kode der ligger hvor der ikke var brugt nl2br har virket uden problemer de sidste 2-3 år, og først efter opgraderingen har den startet med at sætte \r\n
Skal også lige siges at den sætter \r\n men det er en linux maskine.

Så jeg undrede mig ganske enkelt over om det var muligt at slippe for at ændre alle de sider jeg havde alle steder hvor de henter noget - hvilket er et gigantisk arbejde.

Men tænker man måske i en fil der inkluderes på alle sider kan gøre noget i stil med:

if(sizeof($_POST) > 0) {
  foreach($_POST as $key => $val) {
    $_POST[$key] = nl2br($val);
  }
}

Vil det ikke være en mulighed, og vil det være fint nok?
Avatar billede olebole Juniormester
25. oktober 2011 - 02:17 #6
Du tager fejl. Det har aldrig virket sådan. Det kan du spørge en hvilken somhelst PHP udvikler om - eller for den sags skyld en hvilken somhelst anden udvikler.

Der er udbredt konsensus blandt PHP'ere om, at det ville være komplet tåbeligt at fylde data med BR-elementer i databasen. Det giver blot problemer, når du skal rette teksten. BR-elementerne skal jo fjernes igen, før teksten hældes tilbage i et textarea - og det bliver noget frygteligt bøvl at syndikere data via f.eks. RSS.

Er du i tvivl, søger du bare på emnet her i PHP-kategorien. Det, at der er fundamental forskel på rå tekst og HTML, er noget, der driller de fleste, som lige begynder at skrive PHP.

Beskeden har været den samme fra alle kompetente PHP'ere på Eksperten de 12 år, jeg har været på stedet. Derfor - og så selvfølgelig fordi, du får præcis samme besked ligegyldig, hvor du henvender dig - så affinder de fleste sig da også ret hurtigt med virkeligheden  =)
Avatar billede olebole Juniormester
25. oktober 2011 - 02:20 #7
- men peg mig endelig i retning af en artikel el.lign., der bakker dig op. Jeg er lutter øren  *o)
Avatar billede Mik2000 Professor
25. oktober 2011 - 03:04 #8
Hej

Det har det så, for de har jo været online og fungeret uden indtil da, men så vidt jeg kan læse er det magic_qoutes_gvc der har sørget for det ikke var nødvendigt, og det er blevet fjernet fra PHP version 5.3.x, og dermed ikke aktiveret længere efter opgraderingen :)

Så lad mig spørge på en anden måde:
Er der en måde hvorpå man kan gøre sådan, at når man skriver en tekst ud på siden via ren tekst (ingen tekstfelter), så slipper man for den viser \r\n og samtidige slippe for at det giver problemer når teksten skal vises i et text area igen - UDEN at jeg skal rette det måske 600 steder.....?
Avatar billede olebole Juniormester
25. oktober 2011 - 04:55 #9
Nu tror jeg, jeg begynder at forstå. Du har ikke problemer med '\r\n', men med '\\r\\n'  *D

Årsagen er, at du har brugt mysql_real_escape_string uden først at bruge stripslashes først, dengang da magic_quotes_gpc var i brug. Derved har du fejlagtigt escaped allerede escapede tegn. Det er en fejl, der advares tydeligt mod i dokumentationen.

Du er nødt til enten at rette fejlen fra '\\r\\n' til det korrekte '\r\n' alle 600 steder, eller også må du replace tilsvarende, når du udskriver.

Nu om stunder er der i øvrigt ikke grund til at forsøge at 'hacke' sig til sikkerhed med mysql_real_escape_string. Det er langt sikrere - og ved at blive standard i nye applikationer - at bruge mysqli eller PDO til at kommunikere med MySQL databaser
Avatar billede Mik2000 Professor
31. oktober 2011 - 01:38 #10
Hej

Tak for hjælpen
Problemet er nok også det er nogle halvgamle sider, så flere er lavet under PHP 4 mv. :)

Der er point til dig Olebole
Avatar billede Mik2000 Professor
20. november 2011 - 20:03 #11
Behov for et svar hvis du skal have point ellers lukker jeg det med point til mig selv :)
Avatar billede Mik2000 Professor
05. december 2011 - 00:54 #12
Svar - lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester