String in url

Door Jesper Diovo, 19 jaar geleden, 5.153x bekeken

Versie 2 is inmiddels in gebruik: http://www.phphulp.nl/php/scripts/11/1492/

Tegenwoordig zie je het veel vaker. Een mooie, via mod_rewrite gecreëerde url. Blogs, fora, en weet ik veel wat maken er een mooie bedoening van. Vaak zetten ze de titel van het weer te geven stuk tekst in de url, geflankeerd door het id.

Om zo'n titel mooi in de url te krijgen, heb ik dit script geschreven. Het werkt als volgt: de string die je ingeeft wordt naar kleine letters omgezet. Daarna worden alle letters met tekens erop omgezet in gewone letters. Om álle tekens eruit te krijgen, halen we eerst alle tekens die wél zijn toegestaan uit de string om zo de tekens die eruit moeten over te houden. Door een for()-loop, en met behulp van substr() halen we deze 'verboden' tekens uit de string. Als laatste halen we beginnende en eindigende - weg, om zo een mooie stringurl te krijgen.

In het voorbeeld kun je alle zinnen/woorden wat je maar wilt uittesten. Ga je gang!

Met dank aan SanThe en Douwe M voor de twee suggesties (letters met tekens en tekens eruit halen).

Voorbeeld: http://www.dzjemo.nl/phphulp/string-to-url.php

Gesponsorde koppelingen

PHP script bestanden

  1. string-in-url

 

Er zijn 14 reacties op 'String in url'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Iltar van der berg
iltar van der berg
19 jaar geleden
 
0 +1 -0 -1
Je bent eigenlijk al verkeerd bezig als je een artikel naam in de url zet. Stel de naam van het artikel veranderd, klopt je url niet meer, waarop alle zoekmachines vast lopen. Je zou een 302 kunnen sturen, maar dat heb je allemaal niet nodig als je gewoon een id erin zet.

/topic/4/reply/asc/

of mijn favo:
/topic:4/reply:asc/
- -
- -
19 jaar geleden
 
0 +1 -0 -1
Iltar: zoals Jezpur zei, als je gewoon een ID meegeef en de titel gewoon voor erbij meegeef, is er niets aan de hand. Dit doe ik zelf ook (samen met een hoop andere mensen, fok, nu.nl ad.nl noem maar op ;)
Jesper Diovo
Jesper Diovo
19 jaar geleden
 
0 +1 -0 -1
Quote:
geflankeerd door het id

Zegt geloof ik alweer genoeg :-). Misschien ietsje beter lezen de volgende keer, iltar? :-P
Mark PHP
Mark PHP
19 jaar geleden
 
0 +1 -0 -1
Die twee while lussen kan je vervangen door:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
trim($string, '-');
?>


Verder zie ik niet echt het nut in van de for loop. Volgens mij doet het volgende precies hetzelfde (als ik het goed zie):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$regex
= '#[^a-z0-9-]#';
$string = preg_replace($regex, '', $string);//leave out all unwanted characters
?>
Jesper Diovo
Jesper Diovo
19 jaar geleden
 
0 +1 -0 -1
@Agirre: Over je tweede stukje: dan replace je juist alle tekens die wel mogen, en hou je dus de tekens die niet mogen over. De tekens die je overhoudt ga je één voor één langs dmv de for-loop en haal je zo uit de string. Dan hou je vanzelf alleen de a-z en 0-9 en - over.

Edit: dat eerste stukje werkt niet. Ik hou een - aan het begin en eind staan als ik: ":) ik ben jezpur ." replace ;).
Martijn B
Martijn B
19 jaar geleden
 
0 +1 -0 -1
@Jezpuz:
Met dat 2e stukje van Agirre hou je de juiste tekens over. (zie ^)

De regex kan nog anders: #[^\w]#
GaMer B
GaMer B
19 jaar geleden
 
0 +1 -0 -1
Jezpur, wat nou als een of ander Fin nog andere tekens erin plaatst?? Dan klopt je reeks met nog-om-te-zetten tekens niet meer en heb je alsnog een niet-alpha-numerieke teken in je url zitten...
Elwin - Fratsloos
Elwin - Fratsloos
19 jaar geleden
 
0 +1 -0 -1
De letters die je omzet kloppen niet. Neem bijvoorbeeld als string BELGIË. Jouw script genereert dan belgi. Neem je echter België dan heb je wel netjes belgie.

Je kan het oplossen door je tekenreeksen uit te breiden met de hoofdletter equivalent.


[Edit: En toen kapte PHPhulp mijn hele bericht af na 15 woorden... :( En heb ik hem niet helemaal opnieuw geschreven.]


19 jaar geleden
 
0 +1 -0 -1
Ander truckje door htmlentities te gebruiken komt er bv te staan &euml; voor ë en &auml; voor ä en dan is het eerste teken na de ampersand dus gewoon de letter die je zoekt.

Merk op dat het soms wat minder mooi is, b.v. © zal een c geven een quote " een q, maar voor alle 'standaard' letters werkt het prima.
Mark PHP
Mark PHP
19 jaar geleden
 
0 +1 -0 -1
De trim() functie werkt wel degelijk Jezpur, je moet natuurlijk wel even de returnwaarde van trim() opslaan in $string. Een soortgelijke functie die ik voor mijn projecten gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

function makeSafe($string) {
    $string = strtolower($string);
    $string = strip_tags($string);//remove html tags
  
    $from = 'áàäçéèëíìïñóòöšúùüýžÁÀÄÇÉÈËÍÌÏÑÓÒÖŠÚÙÜÝŽ';
    $to = 'aaaceeeiiinooosuuuyzaaaceeeiiinooosuuuyz';
    $string = strtr($string, $from, $to);
    
    $string = str_replace(' ', '-', $string);
    $string = preg_replace('#[^a-z0-9-]#', '', $string);//leave out all unwanted characters
    $string = trim($string, '-');

    if(empty($string)) {
        $string = 'untitled';
    }


    return $string;
}


?>

PS Martijn, \w matcht een underscore, geen koppelteken.
Hipska BE
Hipska BE
19 jaar geleden
 
0 +1 -0 -1
Mijn php (5.2.5) kan op een of andere manier niet werken met die tekens...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$string
= 'áàäçéèëíìïñóòöšúùüýžÁÀÄÇÉÈËÍÌÏÑÓÒÖŠÚÙÜÝŽ';
var_dump($string);
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
string(80) "  "


Ik heb het opgeslaan in UTF-8, UTF-16 werkt niet en in ASCII bestaan die tekens niet.
PHP erik
PHP erik
19 jaar geleden
 
0 +1 -0 -1
Quote:
Je bent eigenlijk al verkeerd bezig als je een artikel naam in de url zet.
Integendeel, dat is goed voor Google en voor je gebruikers. Je moet er gewoon voor zorgen dat de artikelnaam verder overbodig is. Dus zoiets:

example.com/news/34334/PHPhulp_beste_site_van_Nederland.html

Als het nu wordt:

example.com/news/34334/PHPhulp_slechtste_site_van_Nederland.html

dan snapt 'ie het nog gewoon.


Verder vind ik dit script héél eng m.b.t. charsets.
Hipska BE
Hipska BE
19 jaar geleden
 
0 +1 -0 -1
@PHPerik: En als je nu maakt dat wanneer die verkeerde url opgegeven wordt, dat ie automatisch redirect naar de juiste URL? Lijkt mij toch best ok?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
- -
- -
19 jaar geleden
 
0 +1 -0 -1
Niet zo moeilijk om die url ook nog even te checken op juiste naam, maar wat is het nut om dan te redirecten naar de juiste url? Het gaat om de ID, niet om de naam. De naam is een aanhangsel om het mooier te maken e.d. SEO gezien is het goed.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. string-in-url

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.