Autor Zpráva
staco
Profil
Ahojte ,neviete mi prosim poradit s tymto problemom:
Ukladam subory na disk a do databazy,ak je nazov suboru bez diakritiky tak je to Ok,ale akonahle je pisany s diakritikou ,tak ho nespravne ulozi na disk t.j.
dlzne ,makcene a pod ,a samozrejme potom ho neviem nasledne otvorit,nakolko nesedi nazov suboru
Dakujem za rady!

databaza je utf 8 slovak_ci
tu je kod pre formular
<label> Vyberte súbor</label>
<input name="uploaded_file" type="file"   value="<?php echo  htmlspecialchars($uploaded_file); ?>" class="input-xlarge">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />    </td> 
</tr>
<tr> <td>  
<label> Popis k súboru</label>
<textarea  style="color: blue; background-color: lightyellow height:50px;" name="desc" cols="" rows=""   value="<?php echo  htmlspecialchars($desc); ?>"class="input-xlarge"></textarea> 

a tu ukladanie na disk a dB
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
  //Check if the file is JPEG image and it's size is less than 350Kb
  $filename = basename($_FILES['uploaded_file']['name']);
  
  $ext = substr($filename, strrpos($filename, '.') + 1);
    
  if (($ext != "exe") && ($_FILES["uploaded_file"]["type"] != "application/x-msdownload"))  {
    
 $newname="uploads/".$rd2."_". ( htmlspecialchars($filename));      
    
      if (!file_exists($newname)) {
      
        if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],( htmlspecialchars($newname))))) 


    $qry2 = 'INSERT INTO cms_articles (customer_id, submit_date, title, article_text,fdesc,floc,fdatein) VALUES 
    ( ' . $_SESSION['customer_id'] . ', 
                    "' . date('Y-m-d H:i:s') . '",
                    "' . mysql_real_escape_string($title, $db) . '",
                    "' . mysql_real_escape_string (html_entity_decode(($_POST['article_text']))) . '",
      "' . mysql_real_escape_string ($filedesc, $db) . '",
      "' . mysql_real_escape_string ($newname, $db). '",
       NOW())';    
      
   
        //$result = @mysql_query($qry);
        $result2 = $connector->query($qry2);

{
lionel messi
Profil
staco:
Myslím si, že je vhodnejšie (a dokonca je to tak nejak zvykom) diakritiku v názvoch súborov nepoužívať.
Joker
Profil
staco:
Názvy souborů s diakritikou jsou problém, s tím jsem taky kdysi laboroval.
Tuším jsem se dostal i do stavu, kdy readdir nebo scandir vrátily nějaký název souboru a funkce fopen tvrdila, že ten soubor neexistuje. Takže už jen otevřít soubor pojmenovaný s diakritikou není tak jednoduché.

A zásadní problém je, že není zřejmé původní kódování názvu souboru, neboli z jakého kódování převádět.
Různé souborové systémy používají různá kódování a třeba EXT v Linuxu ani nemá žádné konkrétní kódování definované (co si tam aplikace uloží, to tam má). FAT32 a HFS (z MacOS) mají svá proprietární kódování.

Výsledek je, že nejlepší je diakritiku v názvech souborů nepoužívat.

Další poznámky:
- Ošetřování názvů souborů přes htmlspecialchars postrádá smysl.
- Smysl řádku 7 v druhém kódu je taky sporný. Na $files[…]["type"] se nedá spolehnout a i kdyby, pochybuji, že vůbec existuje nějaký typ souboru standardně odesílaný s MIME typem "application/x-msdownload". Dále je dost chabá ochrana vyloučit příponu "exe", ale nechat projít cokoliv jiného (včetně jiných spustitelných souborů a včetně "EXE").
staco
Profil
Joker:
Dakujem pekne za odpovede,este by som sa snad opytal na moznost ,
ze by som ten nazov suboru pred odoslanim na disk pomocou nejakej funkcie zbavil diakritiky (nieco ako set names V sqL) A
TYM by mi to na
disk ulozilo uz bez diakritiky
Existuje nieco take v php
Davex
Profil
Zkus toto: Vytvoření přátelského URL

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: