Autor Zpráva
Paja222
Profil
Ahojte, potřeboval bych dostat proměnnou z adresy včetně diakritky, tzn;

pokud je v adrese &prom=%9A%E8%F8, tak mi echo vypíše ščř.

Ovšem když je v adrese $prom=ščř, echo vypíše ščř nebo nějaké jiné znaky. Jde mi o to, dostat z adresy i tuto diakritiku, protože ani blbuvzorné formuláře bohužel nezajistí, aby uživatel nepřepsal text v adrese. :-)

Vím, že na to existuje funkce, ale nemohu jí najít ani přes google, kdyby někdo z vás věděl, díky za pomoc :-)

Díky, P
Rellik
Profil
Ahoj,
nehledáš náhodou toto: http://cz.php.net/manual/en/function.urldecode.php ? Nebo některou podobnou fci?
Keeehi
Profil
Diakritika v adrese nemá co dělat. Když se někdo hrabe v url, je to jeho problém.
Paja222
Profil
Rellik:
Bohužel, s urldecode dostanu jen ščr, z výše zmíněného ščř, což je to samé, jako klasicky vypsané echem, urlencode již vypíše %C5%A1%C4%8Dr, ale stále to není ono :-(

Keeehi:
diakritika v proměnné až zas tolika nevadí, navíc vím, že tuto funkci jsem kdysi viděl, ale nevzpomenu si bohužel kde
Jan Tvrdík
Profil
Paja222:
To, o co se snažíš, je nesmysl. Jak psal Keeehi, diakritika nemá v URL co dělat. Nicméně tam vypadá pěkně, proto moderní prohlížeče naoko diakritiku v URL podporují. Zadá-li uživatel do adresního řádku http://example.com?prom=ščř, tak moderní prohlížeč automaticky převede řetězec ščř do UTF-8 a server požádá ve skutečnosti o adresu http://example.com?prom=%C5%A1%C4%8D%C5%99.

Na stránce pravděpodobně používáš kódování windows-1250, a proto správně zapsaný řetězec ščř vypadá jako %9A%E8%F8. Nicméně pokud ti někdo ručně napíše do adresního řádku ěšč, tak na server dorazí %C5%A1%C4%8D%C5%99, což je sice validní z pohledu utf-8, ale nesmysl ve windows-1250.

Aby fungovalo ščř zapsané do adresního řádku, tak bys musela převést ten parametr z utf-8 do windows-1250.
echo iconv('utf-8', 'windows-1250', $_GET['prom']);
Nicméně pak ti přestane fungovat ten správný vstup, tj. %9A%E8%F8.
Alphard
Profil
Jak psal Keeehi, diakritika nemá v URL co dělat.
Taky bych se k tomu klonil. Narazil jsem na mnoho rozbitých odkazů na wikipedii jenom proto, že se rozbila ta diakritika. Jde pracovat s diakritikou, wikipedia je důkazem, ale jsou s tím pořád ještě problémy.
Jan Tvrdík
Profil
Alphard:
Jde pracovat s diakritikou, wikipedia je důkazem
To je opět (imho) především práce prohlížečů. Zadám-li do prohlížeče adresu http://cs.wikipedia.org/wiki/Křesťanství, tak prohlížeč požádá server o http://cs.wikipedia.org/wiki/K%C5%99es%C5%A5anstv%C3%AD. Ani wikipedia interně nepoužívá v odkazech diakritiku, protože tam nemá co dělat. Problém způsobuje třeba Opera, která zobrazuje v URL diakritiku a nechá ji tam, i když url zkopíruji (čímž zkopírují nevalidní URL). Lépe se chová Chrome – zobrazuje diakritiku, ale zkopíruji validní URL (bez diakritiky).
Paja222
Profil
Ano, fungovat nebude, ale i to jde ošetřit :-)

$uzivatel = $_GET['nick'];

$upraveny_nick = iconv('utf-8', 'windows-1250', $uzivatel); 
$diak = array('á','č','ď','é','ě','í','ľ','ň','ó','ř','š','ť','ú','ů','ý','ž','Á','Č','Ď','É','Ě','Í','Ľ','Ň','Ó','Ř','Š','Ť','Ú','Ů','Ý','Ž');
$chyba = 0;
for($i=0;$i<count($diak);$i++){
    if($p = strpos($upraveny_nick,$diak[$i]) === true){ $chyba = 1; break;};
    }
if($chyba == 1){$uzivatel = $upraveny_nick;}

Janu Tvrdíkovi samozřejmě děkuji :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: