[PHP] link met spaties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

In de variabele $file zit een directory. Waar het fout gaat is dat toevallig "copy of images" Wanneer ik de volgende opdracht geef:

echo "<a href=$dir/$file/fotos.php target=_blank>$file</a><br>";

Dan krijg je de link
"Copy of image" te zien, maar op het moment dat je daarop klikt gaat de browser naar:

images/Copy/fotos'php

$dir is dus images. Maar het vreemde is dat hij de helft van $file gewoon nedeert.

Joris

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Anders gebruik je toch gewoon urlencode($file). Dan ben je van het hele gesodemieter af.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Doe eens een URLEncode over de link heen, of iig de spaties vervangen door %20

[ Voor 5% gewijzigd door gorgi_19 op 28-06-2004 16:48 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zal het gelijk ff gaan testen

Acties:
  • 0 Henk 'm!

  • Tarin
  • Registratie: Januari 2001
  • Laatst online: 10:48

Tarin

Just plain weird.

Het scheelt sowieso als je \" om je waarden heen zet, dus in plaats van target=_blank target=\"_blank\". AFAIK moet dat officieel ook, volgens de HTML-regels.

[ Voor 15% gewijzigd door Tarin op 28-06-2004 17:01 ]

Ik fiets op de accu van m'n iPod :) | Specs | Pics | Elektro: NL / EN


Acties:
  • 0 Henk 'm!

Verwijderd

En als je het dan ook nog ff netjes doet:
PHP:
1
2
echo "<a href=\"".$dir."/".urlencode($file)."/fotos.php\" 
target=\"_blank\">".$file."</a><br>";


Edit: Layout de-verneukt :)

[ Voor 36% gewijzigd door Verwijderd op 28-06-2004 17:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oke,

Met die urlencode geeft hij wel de hee directory door, alleen dan met + i.p.v. spaties. Dus als je dan een link hebt wordt er gelinkt naar

http://localhost/ftp/fotoalbum/Copy+of+images/head.jpg

i.p.v.

http://localhost/ftp/fotoalbum/Copy of images/head.jpg

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
<a href=copy of images/$file/fotos.php target=_blank>$file</a><br>

Wat gaat hier mis, qua HTML?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 28 juni 2004 @ 17:09:
oke,

Met die urlencode geeft hij wel de hee directory door, alleen dan met + i.p.v. spaties. Dus als je dan een link hebt wordt er gelinkt naar

http://localhost/ftp/fotoalbum/Copy+of+images/head.jpg

i.p.v.

http://localhost/ftp/fotoalbum/Copy of images/head.jpg
Als je wilt dat de spaties worden omgebouwd tot '%20' moet je met str_replace gaan werken:
PHP:
1
2
// vervang " " met "%20" in de variabele $file 
$file = str_replace(" ","%20",$file);

[ Voor 15% gewijzigd door Verwijderd op 28-06-2004 17:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als de variabele $file spaties bevat. bijvoorbeeld Copy of image
Dan wordt er gelinkt naar Copy/fotos.php in paats van Copy of images/fotos.php

Nu heb ik het gedaan met urlencode, en nu wordt er gelinkt naat

Copy+of+images/fotos.php

Toen heb ik bovenaan gezet:

PHP:
1
2
3
4
5
6
7
8
9
$dir = $_GET["var"];
$test = str_replace(" ","%20",$dir);
echo "$test";
$cols = 1;
$handle = opendir($dir);
while(false != ($file = readdir($handle)))    {
    if(stristr($file, ".jpg") != "")        {
        if ($cols <= 3) {
            echo "<a href=", urlencode($test), "/$file target=_blank>[img]",[/img]</a>"; echo "&nbsp;";


Maar dan wordt er gelinkt naar:
http://localhost/ftp/fotoalbum/Copy%2520of%2520images/speeltgitaar.jpg

Terwijl hij bij echo "$test"wel Copy%20of%20images als output geeft.
Waarom linkt hij dan ook niet naar Copy%20of%20images/speeltgitaar.jpg

Dat klopt oook niet

[ Voor 18% gewijzigd door Verwijderd op 28-06-2004 17:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je %20 ook nog eens gaat urlencoden klopt het natuurlijk niet meer ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
$dir = $_GET["var"];
$test = str_replace(" ","%20",$dir);
echo "$test";
$cols = 1;
$handle = opendir($dir);
while(false != ($file = readdir($handle)))    {
    if(stristr($file, ".jpg") != "")        {
        if ($cols <= 3) {
            echo "<a href=$test/$file target=_blank>[img]$test/$file[/img]</a>"; echo "&nbsp;";



Zo doet ie het wel.

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Zoals Tarin en Skaah al aangeven is het al heel erg nuttig om href="blaat' te gebruiken (Dus escapte " (\") er bij zetten)

Acties:
  • 0 Henk 'm!

Verwijderd

Dat kan inderdaad, maar nu is je echo nog steeds niet netjes :(

In correct html staat er quotes om de waarden van de attributen van een tag! En als je dan errors krijgt moet je escapen, zie daarvoor dit stukje (onder de 2e quote): [rml]slindenau in "[ PHP-MYSQL] waarde database word niet ui..."[/rml]

Oh, enne, als je wilt weten of een bestand een plaatje is kan je best checken of de laatste 4 tekens .jpg zijn, maar je kan beter naar het mime type kijken:
PHP:
1
2
3
4
5
6
$info = getimagesize($file); 

if($info["mime"] == "image/jpeg")
{
//het is een jpeg plaatje
}

[ Voor 57% gewijzigd door Verwijderd op 28-06-2004 17:48 ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38

Acties:
  • 0 Henk 'm!

  • vargo
  • Registratie: Januari 2001
  • Laatst online: 09:35
Pas ook op met:
PHP:
1
$dir = $_GET["var"];

De reden hiervoor zit hem in het volgende (uit de php manual):
As of PHP 4.3.0 path can also be any URL which supports directory listing, however only the file:// URL wrapper supports this in PHP 4.3. As of PHP 5.0.0, support for the ftp:// URL wrapper is included as well.
M.a.w. iemand zou kunnen linken naar jouw website met b.v. imageLibrary.php?var=ranzigePlaatjesURL en daarmee content op de site displayen die jij (of nog erger, de klant) niet graag op de website wil zien. Denk eens aan een array welke geldige image dirs bevat en check daarop:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$dir = $_GET["var"];
if( in_array( $dir, $valid_image_dirs ) ){
  $test = str_replace(" ","%20",$dir); 
  echo "$test"; 
  $cols = 1; 
  $handle = opendir($dir); 
  while(false != ($file = readdir($handle)))    { 
    if(stristr($file, ".jpg") != "")        { 
        if ($cols <= 3) { 
            echo "<a href=\"$test/$file\" target=\"_blank\">[img]\"$test/$file\"[/img]</a>"; 
            echo "&nbsp;"; 
        } // end if 
    } // end if 
  } // end while 
} // end if image-dir check

Edit: ff indenting aangepast.

[ Voor 12% gewijzigd door vargo op 28-06-2004 17:56 ]

Pagina: 1