[PHP] file_get_contents() en ampersands

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor een bepaalde serie NAS systemen ben ik een PHP applicatie aan het bouwen. Middels de file_get_contents() functie wil ik bepaalde RSS feeds op kunnen halen en deze vervolgens parsen in een RSS class.

Dit gaat allemaal prima totdat er ampersands in de URL's voorkomen. Dan wordt de URL afgekapt tot de eerste ampsersand.

Dus wil ik bijvoorbeeld deze URL ophalen:

http://url/feed.rss?p=3&a=4

Dan krijg ik alleen het zwarte gedeelte:

http://url/feed.rss?p=3&a=4

Heb al diverse dingen geprobeerd, URL encoden, & replacen door & amp; en ascii hex code %26 maar het lijkt allemaal niet te werken.

cURL zou natuurlijk een optie zijn, maar laat dit nu net niet meegecompiled zijn in de PHP versie op deze NAS systemen.

Iemand enig idee hoe ik dit op kan lossen?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat doet
PHP:
1
2
$url = 'http://url/feed.rss?u=mekker&t=woot';
echo $bla = file_get_contents(rawurlencode($url));

?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 06 oktober 2009 @ 13:12:
Wat doet
PHP:
1
2
$url = 'http://url/feed.rss?u=mekker&t=woot';
echo $bla = file_get_contents(rawurlencode($url));

?
Werkt helaas niet, de url wordt dan helemaal niet meer gesnapt.

code:
1
[function.file-get-contents]: failed to open stream: No such file or directory in blabla

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Note: If you're opening a URI with special characters, such as spaces, you need to encode the URI with urlencode().
Oh, dat had je al geprobeerd. En dat doet natuurlijk niet wat je wil, want je wil juist wèl de ampersand als ampersand versturen, omdat hij deel uitmaakt van de URL.

[ Voor 32% gewijzigd door CodeCaster op 06-10-2009 13:32 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CodeCaster schreef op dinsdag 06 oktober 2009 @ 13:29:
[...]

Oh, dat had je al geprobeerd. En dat doet natuurlijk niet wat je wil, want je wil juist wèl de ampersand als ampersand versturen, omdat hij deel uitmaakt van de URL.
Al geprobeerd, werkt ook niet.

Bv:

PHP:
1
2
3
4
5
    $test = urlencode("http://www.nu.nl/?a=test&b=test");
    
    $contents = file_get_contents($test);
    
    echo $contents;


code:
1
Warning: file_get_contents(http%3A%2F%2Fwww.nu.nl%2F%3Fa%3Dtest%26b%3Dtest) [function.file-get-contents]: failed to open stream: No such file or directory in /home/www/web26/web/ngetter/tst.php on line 5


Dan convert ie alles, dus ook mn ampersands. Het lijkt dus dat het niet kan ofzo.

[ Voor 5% gewijzigd door Verwijderd op 06-10-2009 13:38 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

PHP:
1
2
$contents = file_get_contents('http://www.nu.nl/'.urlencode('?a=test&b=test'));
echo $contents;

Werkt prima. Je wil je protocol ook niet de hele URI encoden, alleen de query string. Beetje debuggen mag wel hoor.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op dinsdag 06 oktober 2009 @ 13:40:
PHP:
1
2
$contents = file_get_contents('http://www.nu.nl/'.urlencode('?a=test&b=test'));
echo $contents;

Werkt prima. Je wil je protocol ook niet de hele URI encoden, alleen de query string. Beetje debuggen mag wel hoor.
Daar heb je gelijk in. Feit is alleen dat jouw voorbeeld wel werkt, alleen de parameters na een ampsersand worden niet meegenomen, ook al urlencode je ze. En dat is dus mijn probleem. Op geen enkele wijze pikt mijn file_get_contents dingen na een ampsersand. Urlencode of niet.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Dan pak je CURL ofzo? Probeer eens wat alternatieven, in plaats van alleen maar roepen dat het niet werkt.
PHP:
1
2
3
4
$ch = curl_init('http://www.google.com/search?ie=utf-8&oe=utf-8&q=boo');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents   = curl_exec($ch);
echo $contents;

[ Voor 21% gewijzigd door MueR op 06-10-2009 14:22 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op dinsdag 06 oktober 2009 @ 14:21:
Dan pak je CURL ofzo? Probeer eens wat alternatieven, in plaats van alleen maar roepen dat het niet werkt.
PHP:
1
2
3
4
$ch = curl_init('http://www.google.com/search?ie=utf-8&oe=utf-8&q=boo');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents   = curl_exec($ch);
echo $contents;
Wellicht moet jij het topic dan eens goed lezen voor je maar wat gaat roepen 8)7

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

MueR schreef op dinsdag 06 oktober 2009 @ 14:21:
Dan pak je CURL ofzo? Probeer eens wat alternatieven, in plaats van alleen maar roepen dat het niet werkt.
PHP:
1
2
3
4
$ch = curl_init('http://www.google.com/search?ie=utf-8&oe=utf-8&q=boo');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents   = curl_exec($ch);
echo $contents;
*zucht, hij roept al dat hij geen CURL heeft op zijn NAS.

Kan je met PHP geen querystring opbouwen gelijk in ASP.NET?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Verwijderd schreef op dinsdag 06 oktober 2009 @ 13:37:
[...]


Al geprobeerd, werkt ook niet.

Bv:

PHP:
1
2
3
4
5
    $test = urlencode("http://www.nu.nl/?a=test&b=test");
    
    $contents = file_get_contents($test);
    
    echo $contents;


code:
1
Warning: file_get_contents(http%3A%2F%2Fwww.nu.nl%2F%3Fa%3Dtest%26b%3Dtest) [function.file-get-contents]: failed to open stream: No such file or directory in /home/www/web26/web/ngetter/tst.php on line 5


Dan convert ie alles, dus ook mn ampersands. Het lijkt dus dat het niet kan ofzo.
Ik vraag me af waarom er een lokale error komt. Probeer je op filesystem niveau met file_get_contents te werken, ipv via de webserver?

Of je snippets die je post komen niet overeen met de source die je nu hebt.

[ Voor 4% gewijzigd door RaZ op 06-10-2009 14:27 ]

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Nu online

--MeAngry--

aka Qonstrukt

Dat komt doordat het geen geldige URL is.

TS: Kun je het eens met fopen() proberen? Welke versie van PHP gebruik je precies? En hoe weet je zeker dat de ampersand niet wordt gepakt?

[ Voor 18% gewijzigd door --MeAngry-- op 06-10-2009 14:30 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Heb je remote file handlers wel aan staan?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Sebazzz schreef op dinsdag 06 oktober 2009 @ 14:31:
Heb je remote file handlers wel aan staan?
ja denk ik ook. Wat is de instelling van allow_url_fopen?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

--MeAngry-- schreef op dinsdag 06 oktober 2009 @ 14:30:
Dat komt doordat het geen geldige URL is.
Inderdaad. Als ik onderstaande stukje uitvoer is er niks aan de hand namelijk.
PHP:
1
2
$contents   = file_get_contents('http://www.google.com/search?ie=utf-8&oe=utf-8&q=boo');
echo $contents;

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is opgelost. Wat bleek nu, de URL string die ik aan file_get_contents() meegaf bevatte al de HTML entities voor ampersands. Deze moest ik dus even terug zetten naar de gewone ampersand chars. En nu werkt het wel naar wens. Vandaar dus dat de URL afgekapt werd omdat hij de ampersand entity tegenkwam, en daardoor dacht ik dat file_get_contents() afkapte bij ampersands.

Stom, stom, stom.

In ieder geval thanks voor alle reacties!

[ Voor 20% gewijzigd door Verwijderd op 06-10-2009 15:01 ]

Pagina: 1