[PHP] laatste slash in URL verwijderen

Pagina: 1
Acties:

Onderwerpen


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn CMS werkt kortweg als volgt:

• iemand tikt een adres in: http://www.site.com/producten/kaas
• ik vul de $q met 'producten/kaas'
• ik zoek in de database welke pagina hoort bij alias 'producten/kaas'
• ik laat de bijbehorende tekst zien

Probleem: Als iemand http://www.site.com/producten/kaas/ intikt (let op de laatste '/'), krijgt q de waarde 'producten/kaas/' en in de database bestaat geen alias met die naam.

De oplossing is om een functie te maken die de laatste '/' van q afhaalt. Ik ben hier nu al een tijdje mee bezig en heb na een tijdje zoeken op php.net het volgende gevonden:
PHP:
1
$pos = strrpos($q, '/');

Hiermee bepaal ik de positie van de laatste '/' in q.

Nu is mijn vraag: hoe vervang ik nu het (bijvoorbeeld) 7e karakter van q door '' (niets dus)? Ik weet dat ik een karakter kan vervangen door een ander karakter dmv. str_replace, maar die vervangt alle occurrences van needle in [i]haystack[/ii], met andere woorden: dan zouden alle slashes vervangen worden (ook in http://) . Hoe vervang ik alleen het $pos'te karakter?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
$q = substr($q,0,strlen($q) - 1);


Mooi gesproken, .oisyn.

[ Voor 40% gewijzigd door Skaah op 30-09-2004 00:30 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je moet het niet zien als een character vervangen door niets, je moet het zien als een nieuwe string die gemaakt wordt uit het stuk originele string voor de positie die weg moet en het gedeelte na de positie die weg moet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Aan de mod: titel moest zijn "[PHP] laatste slash in URL verwijderen" Excuses...te gretig met het klikken op "verstuur bericht" :9~

[ Voor 36% gewijzigd door Reveller op 30-09-2004 00:30 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn dank is groot! Skaah's code werkt. Daar ben ik blij om, maar begrijpen doe ik het nog niet. Ik ga het morgen analyseren en kijken of ik het zou kunnen aanpassen voor andere situaties :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

je zou het ook gewoon zo kunnen doen:

Adres: http://www.site.com/index.php?producten=kaas

De php code om nu te bekijken wat de waarde van produckten is ziet er meestal zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// De Waarde van producten ophalen en in $pagina stoppen. 
$pagina = $_GET['producten'];

// Bepalen welke pagina we moeten weergeven.
switch( $pagina ){
 case "kaas":
  echo "kaas is lekkah!";
 break;
 case "chips":
  echo "chips is lekkah!";
 break;
 default:
  // Deze tekst laten we zien als de variabele $pagina 
  // niet gelijk is aan kaas of chips.
  // Mogelijk adressen zouden kunnen zijn:
  // - http://www.site.com/
  // - http://www.site.com/index.php?producten=kaasjes
  echo "home tekst bla bla!";   
}


Ik hoop dat je nog snapt :)

[ Voor 37% gewijzigd door Verwijderd op 30-09-2004 13:42 ]


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Naast het feit dat jij niet snapt waarom de TS juist /producten/kaas wilt gebruiken, werkt je code ook nog eens niet correct.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Volgens mij haalt de code van Skaah gewoon het laatste karakter van de string af...

Als je de (eventuele) laatste '/' van een string wil verwijderen kun je ook gewoon rtrim() gebruiken:
PHP:
1
$gewensteString = rtrim($q, '/');

Regeren is vooruitschuiven


  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
Ik zou het zo gedaan hebben:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
function StripLastSlash($input) {
    $output = explode("/",$input);
    foreach ($output as $o) {
        if (!empty($o)) {
            if ($output[0] != $o) $Output.="/";
            $Output.=$o;
        }
    }
    return $Output;
}
$test_A="producten/kaas/";
$test_B="producten/kaas";
echo StripLastSlash($test_A);
echo "<br />";
echo StripLastSlash($test_B);
?>
>:)

oisd.nl


  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 15-07 09:34

PrinsEdje80

Holographic, not grated...

Wat als je nou een php-regex doet?
Iets in de trant
PHP:
1
$new_url = preg_replace("\/$", "", $url);

De enige vraag die ik heb is: in het geval dat er geen end-slash is, wordt $url doorgegeven aan $new_url zonder veranderingen?

[ Voor 6% gewijzigd door PrinsEdje80 op 30-09-2004 05:27 . Reden: \ voor de / ]

Used to be Down Under... Foto gallery


Verwijderd

wat ben nog laat op zeg :P

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
omg wat een php-barbaren! Je gaat toch geen regExp doen voor 1 karakter in 1 string? En je wilt toch ook niet altijd het laatste karakter weghebben, alleen indien dit een slash is. rtrim($q, "/") lijkt mij het enige goeie antwoord. Mocht je <PHP4.01 draaien, dan iets simpels als;

PHP:
1
if(substr($q, -1) == "/")  $q = substr($q, 0, -1);

Verwijderd

dusty schreef op 30 september 2004 @ 01:35:
[...]

Naast het feit dat jij niet snapt waarom de TS juist /producten/kaas wilt gebruiken, werkt je code ook nog eens niet correct.
Wel erg kortzichtig van je om te beweren dat zo iets basics niet goed zou zijn je ziet toch dat ik een typo gemaakt heb in de code? Zeg dan gewoon dat er een type foutje inzit. Sorry hoor :) :D

Ik probeer ook maar een oplossing te verzinnen wat mij makkelijker lijkt :)
probleem: Als iemand http://www.site.com/producten/kaas/ intikt (let op de laatste '/'), krijgt q de waarde 'producten/kaas/' en in de database bestaat geen alias met die naam.
iemand kan dan toch net zo goed: http://www.site.com/index.php?producten=kaas intypen :? meestal kom je trouwens op een begin pagina waar je op een linkje klikt met producten :)

[ Voor 57% gewijzigd door Verwijderd op 30-09-2004 14:01 ]


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Verwijderd schreef op 30 september 2004 @ 13:45:
iemand kan dan toch net zo goed: http://www.site.com/index.php?producten=kaas intypen :? meestal kom je trouwens op een begin pagina waar je op een linkje klikt met producten :)
Dat kan. Maar het staat mooier om /producten/kaas/ te gebruiken, plus dat zoekmachines alles achter het ? niet opnemen, of iedergeval niet elke mogelijkheid ervan. En /producten/kaas/ wordt gezien als directory en zal dus wel opgenomen worden. Verder is het voor veel mensen die niet zo goed met computers zijn makkelijker om /producten/kaas/ te onthouden als ?product=kaas. Genoeg reden dus. :)

//edit

En over dat je altijd op een begin-pagina komt, dat is de eerste keer zeker zo. Maar wil iemand later nog eens terug naar de info over kaas, dan zal hij kijken naar die URL en die later intypen.

[ Voor 14% gewijzigd door OkkE op 30-09-2004 13:54 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Okee das een goede reden ja :)
En over dat je altijd op een begin-pagina komt, dat is de eerste keer zeker zo. Maar wil iemand later nog eens terug naar de info over kaas, dan zal hij kijken naar die URL en die later intypen.
Favorieten :)

[ Voor 80% gewijzigd door Verwijderd op 30-09-2004 13:57 ]


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
@SandStormer: klik*

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

//edit: of bekijk de link van chris. 8)7 //

Klopt. Maar makkelijke URLs is wel makkelijker voor als mensen het eens niet in hun Favorieten zetten. Plus, het is makkelijker om de pagina www.iets.nl/producten/kaas/ aan een ander te vertellen als dat het www.iets.nl?producten=kaas is.

En daarnaast is een database bijhouden met aliassen (/producten/kaas/ = ?producten=kaas) veel handiger voor als er dingen veranderen. Nu is het in dit geval minder, maar stel je voor dat je met allemaal id=1 werkt, en om 1 of andere reden veranderd het id (het het parentId), dan is het handig als je een alias hebt. Zodat de favorieten van de bezoeker gelijk kan blijven, en jij via je alias-tabel de bezoeker van /producten/kaas/ niet naar producten=kaas maar naar producten=gelekaas kan sturen.

[ Voor 4% gewijzigd door OkkE op 30-09-2004 14:08 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Weer wat geleerd dank je :) (Okke ook natuurlijk :) )

Dan ga ik dan ook maar eens doen op mijn websites :*)

[ Voor 5% gewijzigd door Verwijderd op 30-09-2004 14:15 ]


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Ondanks dat ik wel fan ben van ALA, slaan ze hier toch wel de plank redelijk mis op sommige punten.
And most importantly, we’re doing our visitors a favor, because they’re no longer losing a few seconds while our server tries to find first a file and then a directory. And in this industry, you and I both know that a few seconds is a long, long time.
Het bepalen of een bestand bestaat duurt een paar seconden? Riiiiight.

Gaan ze een beetje 'zeuren' om disk access, gaan ze daarna een mod_rewrite erin rossen. Nee dat kost geen tijd ofzo? Grote .htaccess files, dat kost tijd. Dat ze mod_rewrite veiliger vinden dan gewoon index.php?bla=about is ook nogal bullshit.

Nou ja, anways. Volgens mij is het allemaal gemierenpr0n van ALA. Het is misschien iets netter om de extra slash te doen dat wel, maar om snelheidsredenen? Neen.

Pardon de offtopiqueness.

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.

Pagina: 1