PHP urlencode težava

V kodi imam spremenljivko $item->title, ki mi vrne vrednost 'Tržnica Bežigrad'.
Želim sestaviti URL, ki bo vključeval to besedo, samo da bo namesto presledka + in da bodo šumniki kodirani.

Ko v kodi testiram vrednosti dobim tole:

<?php
    echo $item->title; // vrne Tržnica Bežigrad
    echo urlencode($item->title); // vrne Tr%C5%BEnica+Be%C5%BEigrad
?>

urlencode mi vrne točno to, kar rabim.

Ko pa v kodi sestavim URL takole

<a href="index.php&searchword=<?php echo urlencode($item->title); ?>">link</a>

dobim namesto znaka + zakodiran presledek (%20) in sicer dobim tak URL:
index.php&searchword=Tr%C5%BEnica%20Be%C5%BEigrad

Ni mi jasno zakaj se to dogaja.

7 odgovorov

Lahko probaš s "primitivno" tehniko (samo primer):

$text = str_replace(array("š","č","ž"),array("s","c",z"),$text);

Via:
http://stackoverflow.com/questions/9252938/php-converting-special-characters-like-s-to-s-to-t-to-a

Dodatek:
http://iamseanmurphy.com/creating-seo-friendly-urls-in-php-with-url-slug/

unrlencodan presledek je v URLjih vedno %20,

za silo lahko naredis:

<a href="index.php&searchword=<?php echo urlencode(str_replace(" ", "+", $item->title)); ?>">link</a>

kjer ti str_replace zamenja presledke s plusi.... ampak mislim, da se tudi plusi pol zamenjajo v urlrewritu, nisem ziher

Se mi zdi da je težava v tem, da imam na strani vklopljene SEO URL-je in mi vsakič zamenja + z %20. Ker sem že prej probal z strreplace in pregreplace, ampak so se mi vsakič zgenerirali URL-ji z %20 namesto +, čeprav je echo strreplace($item->title) ali pregreplace($item->title) vrnil vrednost z +.

Situacija je sedaj takšna:

Z preg_replace zamenjam presledek z kodiranim znakom za + (%2B)

$itemtitle = preg_replace('/\s+/', '%2B', $item->title);

Potem pa sestavim link takole:

<a href="index.php&searchword=<?php echo urlencode($itemtitle); ?>">link</a>

Hecno je to, da se v Firefoxu in Chrome URL prikaže kot

index.php&?searchword=Tr%C5%BEnica+Be%C5%BEigrad

kar je ok, medtem ko se v IE prikaže kot

index.php&?searchword=Tržnica+Bežigrad

Ta link načeloma deluje, če pa ga odprem v novem zavihku, pa ne.
Očitno ima IE neko svojo logiko pri kodiranju special characters.

Nič jasno :/

join the club ;) s tvojo kodo ni nic narobe, ce dela ok na chrome in FFju.... always assume it is IE's fault... tak da se niti ne sekiraj naprej [:D]...

vseeno pa je najboljsa praksa, da vse URLje slugiziras, kar pomeni, da jih naredis cimbolj standard pravilne..sumnike zamenjas s sicniki, druge special znake pa s pomisljaji (vkljucno s spaci)...in seveda vse male crke!

index.php&?searchword=Tržnica+Bežigrad =>
index.php&?searchword=trznica-bezigrad

ce rabis dobro SLUGIZE funkcijo, ti jo lahko na privat posredujem

1

@Mešetar, sicer ne potrebujem v tem trenutku ampak mi bo prav prišlo. Pošlješ prosim še meni?

sure, daj mi mejl na PM