Autor Zpráva
1ight
Profil
1) Dobrý večer mam v adresové řádce ( v pořádku spracováno )
http://www.neco.cz/index.php?file=Mt%252520Picture%252520Janina%252520 08.jpg

2) ale problém kdyz na tý stránce v php dám echo $_REQUEST['file'] a vyjde mi output: Mt%2520Picture%2520Janina%252008.jpg

Rozdily:
1) Mt%252520Picture%252520Janina%25252008.jpg
2) Mt%2520Picture%2520Janina%252008.jpg

Nevíte nekdo jak vy $_REQUESTOVAT nebo vy $_GETOVAT realne to co napsáno je v adresový řádce?
S pozdravem
Nox
Profil
urldecode ?
1ight
Profil
Jste machři, fakt vždycky mě tu dostanete když fakt nevim kam jsem se to dostal

Funkční řešení:
urlencode($_REQUEST['file'])

Fakt děkuju moc už jsem se to tu pokoušel hledat..
Nox
Profil
Už sem se bál, že to byl sarkasmus (no a jestli je tak holt budu za blba:) )
1ight
Profil
Takže jsem zjistil negativní chování pri urlencode a urldecode ( translatuje to hlava nehlava )

Řešení je asi použít $_SERVER['REQUEST_URI'] kde neni žádný překlad a je napsána přesná adresa. V php.ini jsem nic nenašel kde by se dalo nějaký takové zvláštní chování $_REQUESTU vypnout.

Kdyby se tímto chtěl někdo zabývat tak problém je přesně tady: Dejte si do url nekam ?file=Mt%252520F%f%

a přes $_REQUEST['file'] nebo $_GET vám to při echu změní do tvaru Mt%2520F%f% ( ubere jednu číslici 25 ) urlencode / urldecode se to neda fixnout, protože translatuje všechno i co by neměl ( takže by tam nebyla žádná 25tka a při druhým chování by byla všude u % + číslice 25)....
___

Takže řešení je asi vyparsovat $_SERVER['REQUEST_URI'] a z něho to pak zpracovat.
___

Další řešení je to zakodovat base64_encode a rozkodovat base64_decode asi nejlepši

S pozdravem
BetaCam
Profil
1ight
Nevíte nekdo jak vy $_REQUESTOVAT nebo vy $_GETOVAT realne to co napsáno je v adresový řádce?
Takže jsem zjistil negativní chování pri urlencode a urldecode ( translatuje to hlava nehlava )


No super globální pole $_GET a $_REQUEST sou automaticky prohnány přes funkci urldecode() viz. manuál :

The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.

Kdyby se tímto chtěl někdo zabývat tak problém je přesně tady: Dejte si do url nekam ?file=Mt%252520F%f%

a přes $_REQUEST['file'] nebo $_GET vám to při echu změní do tvaru Mt%2520F%f% ( ubere jednu číslici 25 )


nic neubere pouze se to dekóduje viz výše je to standardní chování a v manuálu je na to extra upozornění.

Už jen takovej OT :

Kde ti vlastně bereš ten string Mt%252520Picture%252520Janina%25252008.jpg ??

Možná sem paranoidní, ale proč mi na první pohled přijde divné, že ten soubor se jmenuje :

Mt%2520Picture%2520Janina%252008.jpg

proč mám takovej pocit, že ten soubor se ve skutečnosti jmenuje :

Mt Picture Janina 08.jpg

proč se mi prostě na první pohled když se kouknu na ten tvůj odkaz vybaví kód :

rawurlencode(rawurlencode(rawurlencode('Mt Picture Janina 08.jpg')));


asi sem fakt paranoidní, ale nemáš tam náhodou už bordel při encodování toho url??
1ight
Profil
Já se omlouvám druhý příklad kde je ta druhá chyba při tom druhém negativním chování jsem zde neudal zkuste tohle

Dejme tomu že se soubor na disku jmenuje takto a pošlu ho REQUESTEM že chci zobrazit klientovi tento uvedený soubor ( vše v pořád až na to že REQUEST nebo GET si to modifikuje hlavna nehlava. Jinak se předem omlouvám jestli dělám nekde celou dobu chybu... Včera jsem ty requesty predelal do base64_decode a encode od té doby mi vše funguje

do url vložte
&ss=Mt%252520Picture%252520Janina%a.jpg
___
echo 'Mt%252520Picture%252520Janina%a.jpg<br />';
echo urlencode($_REQUEST['ss']);
echo '<br />';
echo urldecode($_REQUEST['ss']);
echo '<br />';
echo $_REQUEST['ss'];

Predem se jinak omlouvám jestli tu píšu nějakou nepravost ale beru to tak jak vidím u mě v počitači
výsledek u mě je:

Mt%252520Picture%252520Janina%a.jpg
Mt%252520Picture%252520Janina%25a.jpg
Mt%20Picture%20Janina%a.jpg
Mt%2520Picture%2520Janina%a.jpg

výsledek je soubor nenalezen
BetaCam
Profil
1ight

1) Jak se menuje soubor který je uložen na disku.
2) jak získáváš ve scriptu to URI Mt%252520Picture%252520Janina%a.jpg
3)
Mt%252520Picture%252520Janina%a.jpg
Mt%252520Picture%252520Janina%25a.jpg
Mt%20Picture%20Janina%a.jpg
Mt%2520Picture%2520Janina%a.jpg


toto je přece, ale naprosto předvídatelný výsledek. Měl by sis uvědomit, že ani funkce urldecode ani urlencode nepracují s referencí, ale s kopií stringu
1ight
Profil
1) Soubor přejmenuju na a pak ho pošlu na server inputem:
Mt%252520Picture%252520Janina%a.jpg

2) code ktery mi vygeneruje jmeno všech souboru
$getdir = dir(".");
$entries = array();
while($entry = $getdir->read()) {
if ($entry!= '.' && $entry!= '..' && $entry!= 'index.php' && $entry!='default.php' && $entry!='.htaccess') {
echo $entries[] = $entry;
}
}
Realny echo výsledek ktery se mi zobrazi je :
Mt%252520Picture%252520Janina%a.jpg

3) toto udám do linku např <a href="' . $neco . '&soubor=' . $souboru . '"

4) po kliknutí na odkaz a spracování v adresové řádce je soubor v pořádku jen je zde problém při echování REQUESTU na odeslané stránce viz chování echo $_REQUEST['ss']
Mt%252520Picture%252520Janina%a.jpg
Mt%252520Picture%252520Janina%25a.jpg
Mt%20Picture%20Janina%a.jpg
Mt%2520Picture%2520Janina%a.jpg

_______________________
Odpověd:
urldecode ani urlencode nepracují s referencí, ale s kopií stringu

to jsem právě nevědel že to neni až tak dokonale vyřešený proto jsem se tady zasekal ale tak dá se to řešti base64_decode jsem rád aspon za to a hlavne jsem rád za navedení k řešení přes urldecode, tím jsem se dostal až k base64_decode. Kdyby právě někdo věděl jestli se to da řešit nečím jiným byl bych štastnejší kdybych to nemusel řešit přes base64_decode a nebo programovat nejaky složitý filtry pro převod jmen..

Děkuji Vám za Vaše odpovědi s pozdravem.
BetaCam
Profil
1ight
Kdyby právě někdo věděl jestli se to da řešit nečím jiným byl bych štastnejší kdybych to nemusel řešit přes base64_decode a nebo programovat nejaky složitý filtry pro převod jmen..

Dobře zeptám se jinak.

1) Proč ten soubor přejmenováváš takovímto šíleným způsobem.
2) Mt%252520Picture%252520Janina%a.jpg svědčí o tom, že máš nějaký bordel v rutině na přejmenovávání. Něco tam vypadá jako když to prošlo 3x přes rawurlencode() ( %252520 ) a něco jako když to přes encodování vůbec nešlo ( a%a )

Opravdu mám pocit, že ty tvoje problémy sou způsobené hlavně nevhodně zvolenou rutinou pro přejmenovávání souboru při uploadu na server.
1ight
Profil
Zase jsem se dostal k tomu problemu ale tady potřebuju neco neutralniho co by nehashovalo a byly funkční odkazy asi neutralni reseni je to sfiltrovat nejakou funkci nasel jsem to nekde na google tak nejak narychlo. http://snippets.dzone.com/posts/show/1506

S pozdravem mejste se, kdyby nekdo vedel jak to vyrešit a rozkodovat ten problem viz filename
Mt%252520Picture%252520Janina%a.jpg přes REQUEST prosím napište

    function replace_bad_filename_chars($filename) {
      $filtered_filename = "";

      $patterns = array(
        "/\s/", # Whitespace
        "/\&/", # Ampersand
        "/\+/"  # Plus
      );
      $replacements = array(
        "_",   # Whitespace
        "and", # Ampersand
        "plus" # Plus
      );

      $filename = preg_replace($patterns,$replacements,$filename);
      for ($i=0;$i<strlen($filename);$i++) {
        $current_char = substr($filename,$i,1);
        if (ctype_alnum($current_char) == TRUE || $current_char == "_" || $current_char == ".") {
          $filtered_filename .= $current_char;
        }
      }

      return $filtered_filename;
    }

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: