Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Create friendly URL

[es] :: PHP :: Create friendly URL

[ Pregleda: 2586 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sasa03

Član broj: 133079
Poruke: 4
*.st.cable.xnet.hr.



Profil

icon Create friendly URL22.06.2009. u 13:50 - pre 179 meseci
Funkcija urlencode mi vrača friendly URL sa znakom + između rijeći, a ja bi trebao sa znakom - između riječi.

KOD:
<?php
$strString = "create friendly url";
echo '<a href="index.php?id=' . urlencode($strString) . '">Klikni na link</a>';
?>

Rezultat koda: http://www.domena.com/index.php?id=create+friendly+url

a ja bi: http://www.domena.com/index.php?id=create-friendly-url

Molim pomoć.
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
91.148.84.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Create friendly URL22.06.2009. u 14:07 - pre 179 meseci
pa sad koliko je sve ovo URL friendly diskutabilno, ali recimo str_replace ?
mada, ne moguce da se nisi setio toga vec, ako je to problem uopste
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Create friendly URL22.06.2009. u 14:35 - pre 179 meseci
Misliš SEO friendly URL... Baš sam skoro za potrebe jednog mog projekta pravio takvu neku f-ju koja bi "filtrirala" url, i ona otprilike izgleda ovako:
Code:

function filter($url)
{
    $new_url = strtolower($url);
        
    $new_url = preg_replace('/[^a-zA-Z0-9\-_\s]/', '', $new_url);
        
    $new_url = str_replace(array(' ', '_'), '-', $new_url);

    if (strpos($new_url, '--') != false) {
        $new_url = preg_replace('/\-{2,}/', '-', $new_url);
    }
        
    return $new_url;
}

Kao što vidiš, ona u ovom prvom preg_replace-u, uklanja sve što nije alfanumerički karakter. Meni je to za ovaj moj projekat odgovaralo, ne znam dal' će i tebi...
 
Odgovor na temu

ColdKeyboard
Sasa Karanovic
Hardware and Firmware Engineer
Toronto, Canada

Član broj: 31924
Poruke: 868
93.86.192.*

Jabber: ColdKeyboard
Sajt: www.SasaKaranovic.com


+11 Profil

icon Re: Create friendly URL22.06.2009. u 14:51 - pre 179 meseci
Mali prijedlog za Nikolinu funkciju.

Meni mnogo ljepse izgleda url u kome je razmak zamjenjen sa - nego sa _

primjer: http:/www.sajt.com/ime-jako-interesantnog-clanka
primjer: http:/www.sajt.com/ime_jako_interesantnog_clanka

Sad mozda uraditi str_replace() za " - " da se zamjeni sa "-" posto ako bi
razmak mijenjao sa - i ako bi u imenu stranice bilo "rijec - rijec" onda bi dobili
nepotrebne --- :)

Toliko od mene :)
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Create friendly URL22.06.2009. u 14:53 - pre 179 meseci
Pa i menjao sam razmake i donje crte za srednju crtu (-). Prvi parametar str_replace f-je je ono što se menja (search), a drugi ono s čime se menja (replace)...
 
Odgovor na temu

sasa03

Član broj: 133079
Poruke: 4
*.adsl.net.t-com.hr.



Profil

icon Re: Create friendly URL23.06.2009. u 14:31 - pre 179 meseci
Mislim da ću prihvatiti:

Code:
<?php 
$strString = "Pereza Hiltona prebio menadžer skupine Black Eyed/Peas"; 
echo $strString;

echo"<br><hr><br>";

$strString = strtolower($strString);
$numbers = array("ć", "č", ",", " ", "/", "ž"); 
$words = array("c", "c", "", "-", "-", "z");
$change = str_replace($numbers, $words, $strString); 
Print $change; 
?>


vraća:
Pereza Hiltona prebio menadžer skupine Black Eyed/Peas
--------------------------------------------------------------------------------
pereza-hiltona-prebio-menadzer-skupine-black-eyed-peas



Zahvaljujem se na pomoći.
Kad sam otkrio "urlencode" pomislio sam da bi se možda jedno ovakvo jedostavno rješenje moglo napraviti umjesto sa - sa +.

[Ovu poruku je menjao Nemanja Avramović dana 23.06.2009. u 22:09 GMT+1]
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Create friendly URL23.06.2009. u 23:04 - pre 179 meseci
evo funkcija koje ja koristim za generisanje "sefriendly" urlova od naslova artikala/strana/whatever, u pitanju je malo modifikovani kod iz wordpress-a :)
Code:

function seems_utf8($Str) { # by bmorel at ssi dot fr
    $length = strlen($Str);
    for ($i=0; $i < $length; $i++) {
        if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
        elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
        elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
        elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
        elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
        elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
        else return false; # Does not match any model
        for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
            if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80))
            return false;
        }
    }
    return true;
}

function remove_accents($string) {
    if ( !preg_match('/[\x80-\xff]/', $string) )
        return $string;

    if (seems_utf8($string)) {
        $chars = array(
        // Decompositions for Latin-1 Supplement
        chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
        chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
        chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
        chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
        chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
        chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
        chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
        chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
        chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
        chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
        chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
        chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
        chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
        chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
        chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
        chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
        chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
        chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
        chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
        chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
        chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
        chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
        chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
        chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
        chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
        chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
        chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
        chr(195).chr(191) => 'y',
        // Decompositions for Latin Extended-A
        chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
        chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
        chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
        chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
        chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
        chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
        chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
        chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
        chr(196).chr(144) => 'Dj', chr(196).chr(145) => 'dj',
        chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
        chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
        chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
        chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
        chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
        chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
        chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
        chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
        chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
        chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
        chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
        chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
        chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
        chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
        chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
        chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
        chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
        chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
        chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
        chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
        chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
        chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
        chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
        chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
        chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
        chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
        chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
        chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
        chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
        chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
        chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
        chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
        chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
        chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
        chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
        chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
        chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
        chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
        chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
        chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
        chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
        chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
        chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
        chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
        chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
        chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
        chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
        chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
        chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
        chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
        chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
        chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
        chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
        chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
        chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
        // Euro Sign
        chr(226).chr(130).chr(172) => 'E',
        // GBP (Pound) Sign
        chr(194).chr(163) => '');

        $string = strtr($string, $chars);
    } else {
        // Assume ISO-8859-1 if not UTF-8
        $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
            .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
            .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
            .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
            .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
            .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
            .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
            .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
            .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
            .chr(252).chr(253).chr(255);

        $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";

        $string = strtr($string, $chars['in'], $chars['out']);
        $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254));
        $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');
        $string = str_replace($double_chars['in'], $double_chars['out'], $string);
    }

    return $string;
}

function make_sefriendly($string) {

    $original_string = $string;

    $string = remove_accents($string);

    if (preg_match('/^[\x00-\x7f]*$/', $string)) {

        $string = preg_replace( '/[^a-z_0-9\_]/', '-', strtolower($string) );

    } else {

        if (function_exists('mb_strtolower')) {
            $original_string = mb_strtolower($original_string, 'UTF-8');
        }

        $string = preg_replace('/\s+/u', '-', $original_string);
    }

    return trim( preg_replace('/--+/u', '-', $string), '-' );
}

funkcija ce pokusati da napravi latin-only url, ukoliko ne uspe (bar jedan karakter ostane koji ne moze da se automatski prebaci u latin) vratice originalni string lowercased (ukoliko postoji mb_string) u kom su svi whitespace-ovi zamenjeni sa - (crticom).

dobijeni url u bazi cuvam as-is (pri cemu polje ima utf8 charset i collation) a kada ga prikazujem provucem ga kroz urlencode.

sto se tice ove funkcije, moglo bi vrlo lako da se doda preslovljavanje sprske cirilice u latinicu, ali ja to nisam uradio jer ne radim bas sa domacim sajtovima (na kojima se koristi cirilica)...
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Create friendly URL24.06.2009. u 10:50 - pre 179 meseci
Citat:
Aleksandar Ružičić: u pitanju je malo modifikovani kod iz wordpress-a

Pa meni ne deluje da je baš nešto modifikovan...

btw I ja koristim te prve dve f-je...
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Create friendly URL24.06.2009. u 18:30 - pre 179 meseci
zapravo te dve fje (koje sam i uzeo iz wp-a) nisu menjane (samo sto sam dodao da se đ mapira u dj a ne u d), ova treca (make_sefriendly) je izmenjena, tj zadrzana je logika iz neke fje wordpressa (ne znam tacno koje, al mislim da se ne zove isto :D) i dodat revert na originalni string ukoliko remove_accents ne odradi posao... u svakom slucaju ove tri fje meni vrse posao...
 
Odgovor na temu

[es] :: PHP :: Create friendly URL

[ Pregleda: 2586 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.