Titel in URL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jesper Diovo

Jesper Diovo

18/08/2008 12:58:00
Quote Anchor link
Ik ben bezig met een leuk script, en nu wilde ik titels in de url zetten, zodat je een mooie adresbalk krijgt. Op zich wil het helemaal lukken, nu is er alleen nog één probleem: wat nu als er andere tekens - dan die ik al heb - in de titel zitten?

Ik wilde jullie daarom vragen of jullie een betere functie hebben. Heb al wat gezocht, maar kon niet echt tot het juiste keyword komen om zo scripts van dit kaliber eruit gerold te krijgen.

Mijn functie:
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
23
24
25
26
27
28
<?php
function maakUrlTitel($string) {
    $tekens = array(
        "á"=>"a","ä"=>"a","à"=>"a","â"=>"a","å"=>"a",
        "é"=>"e","ë"=>"e","è"=>"e","ê"=>"e",
        "ú"=>"u","ü"=>"u","ù"=>"u","û"=>"u",
        "í"=>"i","ï"=>"i","ì"=>"i","î"=>"i",
        "ó"=>"o","ö"=>"o","ò"=>"o","ô"=>"o","ø"=>"o",
        
        "€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
    foreach($tekens as $teken => $replacement) {
        $string = str_replace($teken, $replacement, $string);
    }

    
    $pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
    for($i=0;$i<=strlen($pregString);$i++) {
        $string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
    }

    
    while(substr($string, 0, 1) == '_') {
        $string = substr($string, 1, strlen($string)-1);
    
    while(substr($string, strlen($string)-1, 1) == '_')
        $string = substr($string, 0, strlen($string)-1);
    
    return $string;
}

?>


Nu zie je dat ik allerlei tekens gewoon uitgetypt heb, en deze in een string heb gezet om ze vervolgens één voor één langs te gaan om te replacen. Volgens mij bestaat er een veel makkelijkere methode via bijv. preg_replace(), alleen heb ik deze nog niet ontdekt.

Ik hoop dat iemand met iets beters komt, scheelt me weer bytes en leer ik waarschijnlijk ook nog eens van :-P.

Groetjes,

Jezpur
 
PHP hulp

PHP hulp

03/02/2023 10:46:29
 
PHP Newbie

PHP Newbie

18/08/2008 13:01:00
Quote Anchor link
urlencode?
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Jesper Diovo

Jesper Diovo

18/08/2008 13:02:00
Quote Anchor link
PHP Newbie schreef op 18.08.2008 13:01:

Nee dat is niet wat ik wil :P.

Als ik nu dit in voer:
jåg elskär dëï.

krijg ik er dit uit (bovenste is mijn functie, onderste urlencode):
jag_elskar_dei
j%E5g+elsk%E4r+d%EB%EF.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
- SanThe -

- SanThe -

18/08/2008 13:12:00
Quote Anchor link
Om die chars te vervangen gebruik ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$lettervan
="ÁÉÓÚÍÄËÖÜÏÀÈÒÙÌáéóúíäëöüïàèòùì";
$letternaar="AEOUIAEOUIAEOUIaeouiaeouiaeoui";
$string = strtr($string, $lettervan, $letternaar);
?>
 
Jesper Diovo

Jesper Diovo

18/08/2008 13:24:00
Quote Anchor link
Oké, iets verandert:

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
23
24
25
26
27
<?php
function maakUrlTitel($string) {
    $string = strtolower($string);
    
    $tekens = array("€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
    foreach($tekens as $teken => $replacement) {
        $string = str_replace($teken, $replacement, $string);
    }

    
    $lettervan = "áéóúíäëöüïàèòùìýÿ";
    $letternaar = "aeouiaeouiaeouiyy";
    $string = strtr($string, $lettervan, $letternaar);
    
    $pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
    for($i=0;$i<=strlen($pregString);$i++) {
        $string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
    }

    
    while(substr($string, 0, 1) == '_')
        $string = substr($string, 1, strlen($string)-1);
    
    while(substr($string, strlen($string)-1, 1) == '_')
        $string = substr($string, 0, strlen($string)-1);
    
    return $string;
}

?>


Maar dan heb ik nog steeds niet een betere oplossing voor al die tekens. Heeft range() niet iets waardoor je al die tekens in één keer in een array krijgt?
 
Leroy Boerefijn

Leroy Boerefijn

18/08/2008 13:28:00
Quote Anchor link
het gaat toch goed zo? dan hoef je het toch niet te veranderen?
 
Jesper Diovo

Jesper Diovo

18/08/2008 13:34:00
Quote Anchor link
Leroy schreef op 18.08.2008 13:28:
het gaat toch goed zo? dan hoef je het toch niet te veranderen?

Klopt, maar het feit is dat er vast nog wel wat tekens zijn die ik níét in die hele reeks heb zitten. Die zullen dan worden weergegeven in de url en dat is niet mooi. Dus ik vroeg me af of er geen functie of iets bestaat om in één keer alle tekens op te halen.
 
Douwe

Douwe

18/08/2008 13:36:00
Quote Anchor link
Ikzelf gebruik hiervoor de volgende functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function StripChars($sString)
{

  $sString = strtolower($sString);
  $sString = str_replace(" ", "-", $sString);
  $sString = preg_replace("@[^a-z0-9-]@", "", $sString);
  return $sString;
}

?>

Deze functie replacet zoals je ziet geen vreemde tekens naar tekens zonder vreemdheid, maar doet wat ik wil. Die vreemde tekens gebruik ik toch nooit.
Deze functie maakt van
jåg elskär dëï.
het volgende:
jg-elskr-d
 
GaMer B

GaMer B

18/08/2008 13:46:00
Quote Anchor link
Gebruik zelf deze:
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
23
24
25
26
27
28
29
30
31
32
<?php
function url_title($str, $separator = 'dash')
{

    if ($separator == 'dash')
    {

        $search    = '_';
        $replace    = '-';
    }

    else
    {
        $search    = '-';
        $replace    = '_';
    }

    
    $trans = array(
        $search                => $replace,
        "\s+"                    => $replace,
        "[^a-z0-9".$replace."]"    => '',
        $replace."+"            => $replace,
        $replace."$"            => '',
        "^".$replace            => ''
    );

    $str = strip_tags(strtolower($str));
    
    foreach ($trans as $key => $val)
    {

        $str = preg_replace("#".$key."#", $val, $str);
    }

    
    return trim(stripslashes($str));
}[
/code]
 
Jesper Diovo

Jesper Diovo

18/08/2008 13:53:00
Quote Anchor link
Ik geloof dat dit de beste is:

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
23
24
<?php
function maakUrlTitel($string) {
    $string = strtolower($string);
    
    $lettervan = "áéóúíäëöüïàèòùìýÿå";
    $letternaar = "aeouiaeouiaeouiyya";
    $string = strtr($string, $lettervan, $letternaar);
    
    $string = str_replace(" ", "-", $string);
    $sTekens = preg_replace("_([a-z0-9-])_", "", $string);
    
    for($i=0;$i<=strlen($sTekens);$i++) {
        $string = str_replace(substr($sTekens, $i, 1), "", $string);
    }

    
    while(substr($string, 0, 1) == '-')
        $string = substr($string, 1, strlen($string)-1);
    
    while(substr($string, strlen($string)-1, 1) == '-')
        $string = substr($string, 0, strlen($string)-1);
    
    return $string;
}

?>


Door Douwe kreeg ik het idee om die chars eruit te halen, en dan te replacen in de volledige string, waardoor dus altijd alles wat geen letter, cijfer of - is weggehaald wordt!
Dankje Douwe :-).

Edit: ik zal hem hier in de scriptlib zetten, geloof dat zoiets nog niet echt in de bieb zit.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
- SanThe -

- SanThe -

18/08/2008 13:58:00
Quote Anchor link
Alles wat een (ascii)waarde groter dan 127 heeft zijn in principe 'vreemde' tekens.
 



Overzicht Reageren

 
 

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.