login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Urlencode

Offline RudyL - 23/06/2006 11:05
Avatar van RudyLNieuw lid Bij het upload script wat ik gebruik maak ik ook gebruik van een email stuk, waarbij de info staat van wie wat heeft geupload enz.

In dit script heb ik ook een download link (onderstaande code):

<td height=\"3\"><a href=http://".$ftp_server.$locatie_download.$_FILES['source_file']['name'].">HIER</a></td>

Echter gaat dit script mis en dat is ook wel logisch wanneer er een spatie staat in de opgegeven bestandsnaam. Is hier wat aan te doen?

Ik heb op het internet naar voorbeelden gezocht over de urlencode functie en behoor ik het dan zo te maken?

$var = '.$_FILES['source_file']['name'].';

$var_encode = urlencode($var);

En dan de

<a href=http://".$ftp_server.$locatie_download.$var_encode.">HIER</a>

12 antwoorden

Gesponsorde links
Offline marten - 23/06/2006 11:09 (laatste wijziging 23/06/2006 11:12)
Avatar van marten Beheerder spaties haal je ergens uit met Trim()

Edit
Maar dat wil je dus niet 

http://www.php.net/urlencode al doorgenomen?
Offline RudyL - 23/06/2006 11:16
Avatar van RudyL Nieuw lid Daarmee word het voor mij niet echt duidelijker met die omschrijving. Hoop daarom dat mijn voorstel om het zo te doen ook toepasbaar is.
Offline xSc - 23/06/2006 11:25
Avatar van xSc Onbekend Rudy, het klopt wat Marten zegt.

Je moet je bestandsnaam omvangen met urlencode(). Daardoor worden dergelijke tekens afgevangen.

Wil je in een andere pagina die download opvragen, dan gebruik je urldecode() eromheen.
Offline RudyL - 23/06/2006 11:35
Avatar van RudyL Nieuw lid Je moet je bestandsnaam omvangen met urlencode(). Daardoor worden dergelijke tekens afgevangen.

Doe ik dit dan niet goed in onderstaande code?

$var = '.$_FILES['source_file']['name'].';

$var_encode = urlencode($var);


Wil je in een andere pagina die download opvragen, dan gebruik je urldecode() eromheen.

ik hoef hem niet direct te tonen, maar wil graag dat de download link goed is.

Offline Thomas - 23/06/2006 11:39
Avatar van Thomas Moderator Waarom zou je iets wat je zojuist hebt geupload, direct weer willen downloaden? Om dit soort problemen te voorkomen sla je het bestand op onder een id, en bewaar je eventueel de originele bestandsnaam.

Uploaden: "irritante naam.doc"
Opslaan als: 12.doc (o.i.d.)

Downloaden: gevraagd document 12
File die aan de gebruiker wordt aangeboden: 12.doc, met als downloadnaam "irritante naam.doc"
Offline RudyL - 23/06/2006 11:44 (laatste wijziging 23/06/2006 12:06)
Avatar van RudyL Nieuw lid Een gast op mijn website kan een document uploaden naar mijn webserver. Wanneer er iets is geupload ontvang ik een mail met de melding dat er een persoon iets heeft geupload.

In deze mail staat voor mij een downloadlink zodat ik wanneer ik niet op het netwerk zit of niet bij de server kan toch het document kan downloaden. Vandaar dat ik gebruik wil maken van urlencode.

Wanneer ik dit gebruik komt er + te staan inplaats van %20. Hoe kan dit en hoe kan ik dit wijzigen.
Offline marten - 23/06/2006 12:07 (laatste wijziging 23/06/2006 12:09)
Avatar van marten Beheerder kijk eens op php.net staat precies wat er aan de hand is als er een + verschijnt 

Citaat:
Geeft een string terug waarin alle niet alfanumerieke tekens behalve -_. zijn vervangen door een procent teken (%) gevolgd door twee hexadecimale cijfers en spaties gecodeerd als plus-tekens ((+).


Je moet dus om de %20 te zien urldecode() gebruiken
Offline RudyL - 23/06/2006 13:51
Avatar van RudyL Nieuw lid Maar ik zou echt niet weten hoe je dit nou in mijn script zou moeten toepassen. Heb er al geprobeerd een variabele erbij te maken waarin ik de urldecode($var_encode); aanmaak. en die aan te roepen in de mail, maar dat gaat niet werken.

Iemand die mij het iets duidelijker wil uitleggen dan php.net en een voorbeeld kan geven (voor kan kauwen?)
Offline marten - 23/06/2006 13:54 (laatste wijziging 23/06/2006 13:57)
Avatar van marten Beheerder Voorbeeldje:

link ----> http://www.testdomein.nl/wat een rare url is dit.jpg

  1. <?php
  2.  
  3. $var1 = 'http://www.testdomein.nl/wat een rare url is dit.jpg'
  4. $url = urlencode($var1);
  5.  
  6. echo $url; //zal iets opleveren met plusjes zoals jij had
  7.  
  8. //*********************************************
  9. $urlschoon = urldecode($var1);
  10. echo $urlschoon; //Zal iets opleveren met procenten e.d.
  11. ?>


Citaat:
urlencode

(PHP 3, PHP 4, PHP 5)
urlencode -- URL-codeert een string
Beschrijving
string urlencode ( string str )

Geeft een string terug waarin alle niet alfanumerieke tekens behalve -_. zijn vervangen door een procent teken (%) gevolgd door twee hexadecimale cijfers en spaties gecodeerd als plus-tekens ((+). Het is gecodeerd op dezelfde manier als de geposte data van een WWW formulier is gecodeerd, dat is dezelfde manier als in het application/x-www-form-urlencoded media type. Dit verschilt van de RFC1738 encoding (zie rawurlencode()) in het feit dat, om historische redenen, spaties zijn gecodeerd als plus (+) tekens. Deze functie is handig als je een string moet coderen die moet worden gebruikt in het query-gedeelte van een URL, als een makkelijke manier om variabelen naar een volgende pagina te zenden.

Voorbeeld 1. urlencode() voorbeeld
echo '<a href="mycgi?foo=', urlencode($userinput), '">';

Opmerking: let op met variabelen die HTML entities kunnen bevatten. Dingen als &amp, &copy en &pount worden geparsed door de browser. Dit is een omslachtigheid waar de W3C al jaren mensen op wijst. Meer informatie is hier: http://www.w3.o...ml#h-B.2.2. PHP ondersteunt het veranderen van de argument separator in een punt-komma, zoals het W3C dat aanraadt, met de .ini optie arg_separator. Jammer genoeg zenden de meeste user agents form data niet in een punt-komma gescheiden formaat. Een wijder ondersteunde manier is om &amp; te gebruiken in plaats van & als het scheidingsteken. Het is niet nodig om daarvoor PHP's arg_separator aan te passen. Laat het gewoon op & staan, maar codeer je URLs met htmlentities()(urlencode($data)).

Voorbeeld 2. urlencode/htmlentities() voorbeeld
echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">';
Offline RudyL - 23/06/2006 14:19 (laatste wijziging 23/06/2006 14:46)
Avatar van RudyL Nieuw lid De URL decode, geeft bij mij geen procenten weer. Maar gewoon de bestandsnaam dus met spaties. Ligt dit aan het feit dat ik niet de volledige URL gebruik, maar alleen de bestandsnaam zo wil afvangen?

Ik denk wel dat bovenstaand klopt. Ik zou dan echter http://mijnipnummer/map/map/$_FILES['source_file']['name'] moeten kunnen gebruiken, maar volgens mij werkt dat niet.


EDIT:

De decode echo geeft dan ook al geen %20 tekens terug, maar gewoon: wat een rare url is dit.jpg wanneer ik jou voorbeeld script gebruik. Bij encode krijg ik wel de + jes bij de spatie.
Offline marten - 23/06/2006 14:51
Avatar van marten Beheerder
  1. <?php
  2.  
  3. $var1 = 'http://www.testdomein.nl/wat een rare url is dit.jpg'
  4. $url = urlencode($var1);
  5.  
  6. echo $url; //zal iets opleveren met plusjes zoals jij had
  7.  
  8. //*********************************************
  9. $urlschoon = urldecode($url);
  10. echo $urlschoon; //Zal iets opleveren met procenten e.d.
  11. ?>


Foutje van mij. Als het goed is moet het zo werken
Offline RudyL - 23/06/2006 14:59 (laatste wijziging 23/06/2006 15:44)
Avatar van RudyL Nieuw lid Geeft geen andere weergave dan wanneer je de urldecode($var1); laat staan. Blijft dus met wat een rare url is dit.jpg weergeven inplaats van het gewenste %20 ertussen.

Of gebeurd dit wanneer het een link wordt?

Oja je mist ook nog een ; acht er jpg'

---------------------------

Heb het voor elkaar gekregen op de volgende manier.

$var = $_FILES['source_file']['name'];
$var_rawencode = rawurlencode($var);

a href=http://".$ftp_server.$locatie_download.$var_rawencode."

Door de rawurlencode worden de spaties verwerkt tot een %20 Dit zorgt er bij mij voor dat het de totale bestandsnaam zichtbaar word en het bestand dus te downloaden is. Gelukkig.

Bedankt voor je hulp
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s