[php/html] grote tekst doorgeven met form

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een website waarbij mensen een grote lap tekst moeten typen en deze kunnen verzenden (methode = POST).

Op de volgende pagina ontvang ik deze tekst dus in een variabele, en zet deze even in een hidden field zodat hij ook beschikbaar is op de pagina hierna:

PHP:
1
echo '<input type="hidden" name="tekst" value="' . $_POST['tekst'] . '">';


Als ik dit form nu op zijn beurt verstuur dan wordt op de 3e pagina deze data in een (MySQL) tabel gestopt.

Maar als er in het verhaal dubbele aanhalingstekens staan (") of enkele (') dan gaat het mis.

Nu heb ik uiteraard (Ivy is niet helemaal gek) gehoord van add- en stripslashes.
Dus ik lekker creatief doen en bij de tweede pagina dit gedaan:

PHP:
1
echo '<input type="hidden" name="tekst" value="' . addslashes($_POST['tekst']) . '">';


Maar toch gaat het mis, en volgens mij bij de HTML. Want die snapt het niet helemaal, als ik in de bron van de tweede pagina (de pagina het het hidden field) kijk zie ik dit:

(in het vb wordt deze (test) tekst doorgestuurd:

Dit is een"test" tekst.

)

Bron:
code:
1
<input type="hidden" name="tekst" value="Dit is een \\\"test\\\" tekst.">


Dus wat wordt dan de var 'tekst' op pagina 3? Dit:

Dit is een \\

Niet helemaal goed dus. Weet iemand hoe ik dit op moet vangen?
Nogmaals, add- en stripslahes ken ik heus wel maar ik denk dat ik niet helemaal weet hoe ik het moet gebruiken.

Ik zat te denken om handmatig alle ", ' en \ te vervangen door een 'gekke' string met str_replace, dus dat je dan " vevangt door %^&* en dit later weer terugzet, maar snugger als ik ben snap ik ook nog wel dat dat niet nodig gaat zijn.
Ik denk dat ik in de buurt zit met mn addslashes, heb alleen even het duwtje in de rug nodig...

Modjes ik hoop dat het niet (weer ;) ) een closed-topic gaat worden, ik kom er echt niet uit..!

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

http://nl.php.net/manual/nl/function.htmlentities.php

Tip: Loop de manual eens door, om eens te kijken welke functies er allemaal zijn. Je hoeft ze niet uit je hoofd te leren. Maar het bestaan van de basis functies is toch wel essientieel.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Die addslashes zijn alleen voor php. Ik weet niet of er voor HTML een oplossing is om te escapen. Het is juist dat er: Dit is een \\\ in je var komt te staan, want dat zit tussen de open en sluit quote.

Een oplossing zou kunnen zijn om de quotes te vervangen door: &quot;

Ik neem aan dat die htmlentities functie precies dat doet, maar dan met alle special characters.

[ Voor 16% gewijzigd door Fatamorgana op 27-08-2003 09:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Fatamorgana schreef op 27 augustus 2003 @ 09:52:

Ik neem aan dat die htmlentities functie precies dat doet, maar dan met alle special characters.
Idd, en dat wist ik niet! Voor degene die dit probleem ook tegen gaat komen:

PHP:
1
2
3
4
// eerst omzetten
$tekst = htmlentities($tekst, ENT_QUOTES);

// dan versturen in een hiddenfield!


nb: de ENT_QUOTES zorgt ervoor dat zowel de dubbele- als enkele quotes omgezet worden. Zie: php.net

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 13:28
Kun je niet beter het tussenresultaat tijdelijk in een sessie var opslaan, zodat het niet 2x verstuurd hoeft te worden vanuit de client? Ben je meteen af van je addslashes geneuzel.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Het probleem van je driedubbele slashes zal waarschijnlijk komen omdat je server gpc_magic_quotes ofzo heeft aan staan. Das die irritante feature die overal zelf slashes aan toevoegt :P

Maar goed, maar niet zoveel uit, want het moet het inderdaad met html-entities doen :)

[ Voor 3% gewijzigd door Bosmonster op 27-08-2003 10:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mjax schreef op 27 August 2003 @ 10:31:
Kun je niet beter het tussenresultaat tijdelijk in een sessie var opslaan, zodat het niet 2x verstuurd hoeft te worden vanuit de client? Ben je meteen af van je addslashes geneuzel.
Noem het geneuzel, maar als je de juiste functies gebruikt dan werkt het gewoon (blijkbaar)! Maar sessies zou inderdaad kunnen, en ik denk dat als je nog een stap zou moeten doen (dus als je met 4 pagina's werkt) je beter met sessie kunt gaan werken..

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Dat lijkt mij ook, zeker omdat je dan een stukje minder dataverkeer hebt. Natuurlijk is het een beetje wikken en wegen want het kost wel meer geheugen.
Pagina: 1