[PHP] hoe "\n" in textareas escapen? *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 16-09 09:35
Ik heb een textarea waarvan de inhoud wordt opgeslagen in een mysql db, vervolgens moet deze inhoud ook weer worden weergegeven in dezelfde textarea

het probleem is dat wanneer ik \n invoer, en vervolgens de string ophaal uit de db en in de textarea zet, hij dit logischerwijs omzet naar een enter

hoe kan ik nou zorgen dat wanneer \n letterlijk wordt ingevoerd, hij dit ook letterlijk als \n laat zien, ik kan wel \n gaan replacen, maar dan neemt ie alle echte enters ook mee

ik hoop dat het probleem een beetje duidelijk is

[ Voor 5% gewijzigd door plakbandrol op 26-10-2004 02:49 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Escapen, het helpt bovendien als je aangeeft met welke taal je de string mee afhandelt (ik gok PHP :P, in dat geval addslashes($string); )

Acties:
  • 0 Henk 'm!

  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 16-09 09:35
ja het is inderdaad PHP

maar addslashes heeft er toch weinig mee te maken? die zet " om naar \" enz

met \n doet hij niets.. functies als htmlentities() hebben ook geen nut aangezien een textarea geen html gebruikt

het probleem is dus dat bij het invoeren en opslaan van een string zowel de enters als de \n moeten worden opgeslagen, hoe kan ik nou bij het opslaan/uitlezen onderscheid tussen deze 2 maken?

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

plakbandrol schreef op 26 oktober 2004 @ 02:56:
ja het is inderdaad PHP

maar addslashes heeft er toch weinig mee te maken? die zet " om naar \" enz

met \n doet hij niets.. functies als htmlentities() hebben ook geen nut aangezien een textarea geen html gebruikt

het probleem is dus dat bij het invoeren en opslaan van een string zowel de enters als de \n moeten worden opgeslagen, hoe kan ik nou bij het opslaan/uitlezen onderscheid tussen deze 2 maken?
http://nl.php.net/addslashes
string addslashes ( string str)

Returns a string with backslashes before characters that need to be quoted in database queries etc. These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).

Acties:
  • 0 Henk 'm!

  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 16-09 09:35
je hebt gelijk! ik had het eerst ook op deze manier, maar toen gebruikte ik stripslashes nadat ik het uit de db had gehaald (leek me logisch nadat je addslashes had gebruikt) maar toen werkte het niet, ik heb het nu eens zonder stripslashes geprobeerd en dat lijkt wel te werken! ;)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

[PHP] in de titel gefrot, zie ook de stickies van Programming & Webscripting.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

plakbandrol schreef op 26 oktober 2004 @ 03:07:
leek me logisch nadat je addslashes had gebruikt)
Is niet zo heel logisch; Je slasht juist omdat je wilt voorkomen dat mysql je niet begrijpt. Als je je data er weer uittrekt is het normaal.

Overigens kan je ook 'mysql_escape_string' gebruiken, daarvan is de werking eigenlijk wel direct duidelijk, al doettie ruwweg hetzelfde :)

Acties:
  • 0 Henk 'm!

Verwijderd

Lekker veilig is dat zonder stripslashes/addslashes (niet dus). Maar als ik het goed begrijp wil je dus handmatig een \n typen zonder dat die gereplaced mag worden? Dan moet je idd zoals plakbandrol al aangeeft addslashes gebruiken.

Gebruik ALTIJD addslashes als je gegevens vanaf een gebruiker in een database wil plaatsen. Dit voorkomt dat mensen je website kunnen hacken. Als ik nl in je textarea de volgende text neerzet dan "zou" ik je kunnen hacken.
code:
1
'; DELETE FROM table WHERE 1==1;

Dit komt omdat mysql (sql or whatever) dit dan zal zien als opdracht ipv text. Addslashes zet een backslash voor de quotes waardoor mysql het niet meer ziet als opdracht.

[note]
Deze reactie was getyped net voordat GoT offline ging voor de verhuizing van TeleCity naar RedBus, heb even moetten wachten dus voordat ik hem kon versturen ;)

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Verwijderd schreef op 26 oktober 2004 @ 18:44:
Lekker veilig is dat zonder stripslashes/addslashes (niet dus). (...)
Gebruik ALTIJD addslashes als je gegevens vanaf een gebruiker in een database wil plaatsen.
Nou, je kan het ook aan anderen overlaten B)
plakbandrol schreef op 26 oktober 2004 @ 03:07:
ik heb het nu eens zonder stripslashes geprobeerd en dat lijkt wel te werken! ;)
Dat komt omdat php hoogstwaarschijnlijk zelf de addslashes er al bij heeft verzonnen. Lees die pagina die prototype al gaf, nou eens helemaal door:
The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping.
...en dan heb je dus tweemaal stripslashes nodig om het origineel weer terug te krijgen. Als ik een $_POST uitlees staat daar dus altijd iets als
PHP:
1
2
if(!get_magic_quotes_gpc()) 
    $yada = addslashes($blah);
...onder. HTH :)

[ Voor 3% gewijzigd door Rataplan op 26-10-2004 19:11 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Rataplan schreef op 26 oktober 2004 @ 19:06:
[...]
...en dan heb je dus tweemaal stripslashes nodig om het origineel weer terug te krijgen.
Niet als je het in een database gooit, en er weer uit trekt. Dan raak je één setje slashes kwijt :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb een textarea
Als je uit de db wil halen:

nl2br($var);

Voila.

op deze manier hoef je niet te kutten met addslashen e.d. De input beveiligen kan op veel betere manieren en met nl2br() hou je de opmaak van de textarea.
Pagina: 1