Autor Zpráva
dragonder
Profil
Ahoj,

potřeboval bych, aby mi PHP zakódovalo daný řetězec dle metody, která se používá
např. do adresy nebo při zobrazení zprávy JavaScriptu.

Nevím, jestli to chápete. Vyjádřím se lépe: PHP má zakódovat řetězec a vloží ho do URL
adresy, na kterou se přesměruje. Příklad:

//Udělám si řetězec.
$error="Při zadávání něčeho došlo k (této a této) chybě. ";
//Teď se nějak ten řetězec $error zakóduje.
$error=(zakódování);
//Nakonec přesměruji na stránku, kde se proměnná $error zobrazí jako chybný text.
header("location: http://mojedomena.cz/index.php?error=".$error);

To 'došlo k (této a této) chybě' je zde proto, že chyb může být více a v různém pořadí.
Jinak bych samozřejmě mohl na koncové URL v JavaScriptu pro každou chybu udělat
text (větvením) podle čísla chyby odeslaného z PHP, ale nechce se mi dělat tisíce řetězců :-)
Zkoušel jsem toto zakódovat následující funkcí
urlencode(iconv("UTF-8", "Windows-1250", $error));
, ale výsledek je, že se mi zakódují puze háčky, ale čárky, které by se jinak
(bez kódování) zobrazily, se nezobrazují a místo toho se text "ukončí" (asi že je to špatně)...
Příklad:
Při zad a už nic.

Takže moje otázka zní: Jakou funkcí text zakódovat, aby se to zobrazilo i s háčky a
zároveň i s čárkami? Případně jak to udělat s uvedenou funkcí nebo jak to správně ošetřit?

Děkuji mockrát za odpovědi.

P.S. Jsem začátečník, tak prosím více vysvětlení :-)
mzk
Profil *
dragonder:
a toto ti nefunguje?
$test = urlencode('nějaký žluťoučký, !? kůň');
echo '<a href="index.php?test='.$test.'">'.$test.'</a>';

echo $_GET['test'];
echo urldecode($_GET['test']);
případně bys to měl ještě obalit funkcí htmlspecialchars()
Davex
Profil
dragonder:
Pokud jsou všechny skripty uloženy v kódování UTF-8, tak by mělo pro přesměrování stačit
$error = rawurlencode($error);
header("location: http://mojedomena.cz/index.php?error=".$error);

a ve skriptu index.php vypsat:
<meta charset="utf-8">
<?php
  if (!empty($_GET['error'])) {
    echo htmlspecialchars($_GET['error'], ENT_QUOTES, 'UTF-8');
  }
?>

mzk:
Hodnoty v superglobálních polích $_GET atd. jsou automaticky dekódované a není na ně potřeba používat urldecode.
dragonder
Profil
mzk:
Samotné urlencode mi bohužel nefunguje.
Výsledek je takový, že se místo "č" zobrazí "è" a místo
"ř" zobrazí neznámé "ø". Toto se ale zobrazuje i při
použití funkce htmlspecialchars().
mzk
Profil *
dragonder:
použití funkce htmlspecialchars()
ta funkce je tam kůli bezpečnosti, né kůli tomu kódování
dragonder
Profil
Davex:
Zkoušel jsem dát do kódu
$error=rawurlencode("Při zadávání něčeho došlo k (této a této) chybě. ", ENT_QUOTES);,
ale když pak na index.php přesměruji, je proměnná prázdná.
Adresa je http://mojedomena.cz/index.php?error= - prostě je 'error' prázdné.
Nevím, co dělám špatně...
Davex
Profil
dragonder:
Nevím, co dělám špatně...
Špatně opisuješ. Funkce rawurlencode nemá druhý parametr.
dragonder
Profil
Davex:
Funkce rawurlencode nemá druhý parametr.
Aha, promiň :-) Ten druhý parametr tam skutečně nebyl...
Každopádně se mi i když je to opsáno správně stejně zobrazuje
to od samotné funkce urlencode (místo "č" se zobrazí "è" a místo "ř" zobrazí neznámé "ø").
Davex
Profil
dragonder:
Vypadá to, že se ti neshoduje kódování ve všech skriptech nebo ho máš špatně deklarované. Viz Čeština / cestina » Automatické meta nastavení.
dragonder
Profil
Davex:
Bylo to tou češtinou. Už to krásně jde.

Díky.

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: