[PHP] POST gaat mis als &-teken in string zit

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pelleke
  • Registratie: Maart 2003
  • Laatst online: 08-11-2024

pelleke

Aut viam inveniam aut faciam

Topicstarter
Als ik in een programma een post doe van een string waar &-tekens in voorkomen, dan kapt PHP ze af. Een voorbeeld:

code:
1
2
3
4
Delphi:
XML='<ROW RowState="8" tussenvoegsel="van" email="maurits@speeltcello.nl&gt;a"/>';
StringList.Add 'xml='+XML;
IdHTTP.Post(URL,StringList);

resulteert in
code:
1
2
3
4
5
PHP:
echo $_POST['xml']

levert op:
<ROW RowState="8" tussenvoegsel="van" email="maurits@speeltcello.nl

En omdat daar een & teken zit denkt PHP dat daar een nieuwe postrecord begint. En dat is niet de bedoeling.

Nu is dus mijn vraag: Hoe post ik een &-teken mee over HTTP voor gebruik met PHP-variabelen?

Acties:
  • 0 Henk 'm!

  • Nakebod
  • Registratie: Oktober 2000
  • Laatst online: 15:37

Nakebod

Nope.

& opvangen/replacen met &amp (Of was het nu met een ; )
Tenminste, bij normaal HTML had ik ook wat linkjes erin staan met & erin, en de W3C Validator gaf dat als fout aan. Na de & vervangen te hebben door &amp ging het goed.
Denk dat het hier ook wel helpt.

Edit: het is
code:
1
&amp;

[ Voor 21% gewijzigd door Nakebod op 19-04-2005 09:32 ]

Blog | PVOutput Zonnig Beuningen


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Een & teken heeft een speciale betekenis in een url. Het is immers het scheidings teken tussen verschillende variabelen. hetzelfde geld bijvoorbeeld ook bij +. Zoals ook in de http RFC is te lezen zul je je vulling moeten urelencoden.

@nakebod:
Dat geld voor html documenten, niet voor url's.

[ Voor 12% gewijzigd door Janoz op 19-04-2005 09:32 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • pelleke
  • Registratie: Maart 2003
  • Laatst online: 08-11-2024

pelleke

Aut viam inveniam aut faciam

Topicstarter
Is er een delphi-functie die URLEncode uitvoert, zodat ik die XML kan encoden?

//EDIT
Ik heb een class-functie gevonden in TIdURI, hij heet TIdURI.URLEncode.

Nu heb ik alleen 1 probleem: als ik ueXML:=TIdURI.URLEncode(XML); aanroep krijg ik een error "Protocol not set" o.i.d. Als ik van TIdURI een instance aanmaak kan ik gewoon de Protocol-property op 'http' zetten, maar gek genoeg krijg ik dan nog steeds dezelfde error. Iemand een idee hoe het wel moet?

@nakebod:
Dat lijkt me stug; in een url wil je juist geen &-tekens hebben, laat staan dat ze dan in de codering terecht moeten komen. Een &-teken splitst variabelen op. (ik wist trouwens niet dat dat in de HTTP-RFC was bedacht, ik dacht dat het een afspraak was over server-side scripting.)

[ Voor 35% gewijzigd door pelleke op 19-04-2005 12:11 ]