Autor | Zpráva | ||
---|---|---|---|
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
Ahoj, nezakládám zbytečně nové téma, ale píšu sem. Mám problém se zapsáním reguláru (vč správných php funkcí) pro nahrazopvání . v názvu nahrávaného souboru. Chci tedy ošetřit jména souborů nahraných na web (ve windows se může soubor jmenovat a.b.c.a.přípona, ale na webu to dělá bordel. Takže potřebuju najít poslední tečku před příponou a ostatní tečky před ní nahradit _ (popř jiným, to si spravím sám). Kdyby někdo měl, hodila by se ui nějaká rozsáhlejší funkce na úpravu názvů souborů pro web. Předem díky Petr |
||
SwimX Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
matlala: jednu takovou "rozsáhlejší funkci" bych měl :D $jmeno = str_ireplace( array("ě","š","č","ř","ž","ý","á","í","é","ů","ú"," ","-",":",",","!","?","{","}","(",")","[","]","'","*","&","^","%","$","#","@","+",";","`","~","÷","<",">","/","\\","\"","=","%20"), array("e","s","c","r","z","y","a","i","e","u","u","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"), $jmeno); $jmeno = preg_replace('@\.(\.)+@','.',$jmeno); //více teček nahradí jednou $jmeno = preg_replace('@(\.([^\.])+\.)+@U','-$2-',$jmeno); //odstraní všechny kromě poslední |
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
díky |
||
Majkl578 Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
SwimX: Fuj. Zkus se podívat na funkci strtr. Navíc to nefunguje. matlala: Hmmm, myslím, že vlastní téma sis založit měl. $filename = 'aa.bb.cc.dd.dat'; preg_match('~^(.*)(\.[a-z0-9]+)+?$~iu', $filename, $matches); var_dump($matches); $filename = str_replace('.', '', $matches[1]) . $matches[2]; var_dump($filename); |
||
Chamurappi Profil |
#5 · Zasláno: 26. 11. 2009, 21:13:41
Reaguji na matlalu:
„nezakládám zbytečně nové téma, ale píšu sem“ Příště laskavě nedělej nepořádek, tvůj dotaz s tím předchozím nijak nesouvisel. |
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
ale funguje, jen byli blbě pojmenované proměnné, jinak nemohl bys dodat i poznámky, co udělá co? |
||
Majkl578 Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
matlala: Asi jsi se nepodíval pořádně, ale jeho kód nahrazuje i poslední tečku. |
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
aha, jsme to pořádně nezkusil, zkoušel sjem jen diakritiku a spešl znaky. lae trocha jsme to upravil a hodil do funkce: function NazvySouboru($vstup){ $filename=strtolower($vstup); $jmeno = str_ireplace( array("ě","š","č","ř","ž","ý","á","í","é","ů","ú"," ","-",":",",","!","?","{","}","(",")","[","]","'","*","&","^","%","$","#","@","+",";","`","~","÷","<",">","/","\\","\"","=","%20"), array("e","s","c","r","z","y","a","i","e","u","u","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"), $filename);//nahradí diakkritiku a podbné vč mezer $jmeno2 = preg_replace('@\.(\.)+@','.',$jmeno); //více teček nahradí jednou $jmeno3 = preg_replace('@(\.([^\.])+\.)+@U','-$2-',$jmeno2); //odstraní všechny kromě poslední $nahrazeno=eregi_replace("_+", "_", $jmeno3);//odstraní přebytečné _ return $nahrazeno; } odskoušel jsem to nahráním souboru s původním názvem GB s.r.o a soubor se přejmenoval na gb_s-r-o.doc, taky jsem zkusil ěščřžýáýíšééáíšříé´=#&@.gif a předělané jméno je escrzyayiseeaisrie´_.gif |
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
proč to tu furt mažete, může se to někomu přeci jen hodit, takže to vzdávám, admine, který to mažeš sbohem, tady snad nekdy přestanu z takovou chodit |
||
Chamurappi Profil |
#10 · Zasláno: 26. 11. 2009, 21:32:19 · Upravil/a: Chamurappi
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
Reaguji na matlalu: Nemažeme. Přesouváme. „Řešíte-li jiný problém než tazatel, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky.“ — To jsi četl, ne? „admine, který to mažeš sbohem“ Nazdar. |
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
OT:jo už jo, aspon napiš kam jsi to přesunul, ja su uplně zmatenej (oprava, měls napsat dříve kam to šopls) PS:zkuste zavést aspon OT, ikdyž tohle saotné je OT :-D Moderátor Chamurappi: V horním menu máš odkaz „Můj profil“, přes který si můžeš všechny své aktivity dohledat, ať jsou kdekoliv.
|
||
matlala Profil |
Moderátor Chamurappi: Přesunuto z Reguláry (pro fuckina :D).
OT: jo vim,že je můžu dohledat, jen dneska sjme dost ve spěchu, a nějak to tu ani nikdy nehledám. |
||
matlala Profil |
#13 · Zasláno: 26. 11. 2009, 21:40:53 · Upravil/a: matlala
aha no fakt to nahrazuje i poslední, ale jen když to zkusím vypsat:
$vstup="aa.bb.cc.dd.dat"; echo NazvySouboru($vstup); vypíše aa-b-cc-d-dat, jinak to soubory nechává pojmenované dobře, viz celý script, možná je někde nějaká věc co to zmemožní function NazvySouboru($vstup){ $filename=strtolower($vstup); $jmeno = str_ireplace( array("ě","š","č","ř","ž","ý","á","í","é","ů","ú"," ","-",":",",","!","?","{","}","(",")","[","]","'","*","&","^","%","$","#","@","+",";","`","~","÷","<",">","/","\\","\"","=","%20"), array("e","s","c","r","z","y","a","i","e","u","u","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"), $filename); $jmeno2 = preg_replace('@\.(\.)+@','.',$jmeno); //více teček nahradí jednou $jmeno3 = preg_replace('@(\.([^\.])+\.)+@U','-$2-',$jmeno2); //odstraní všechny kromě poslední $nahrazeno=eregi_replace("_+", "_", $jmeno3);//odstraní přebytečné _ return $nahrazeno; } function nahrajsoubor($textpole,$popisekpole){ $set=mysql_fetch_array(mysql_query("SHOW TABLE STATUS LIKE 'soubory'")); $cilo=$set['Auto_increment']; $nazevSouboru = $_FILES[$textpole]['tmp_name']; $filename = $_FILES[$textpole]['name'];//Původní jméno souboru, strtolower převede na malá písmena $soubor = NazvySouboru($filename); $konecnyNazevSouboru=$cilo."_".$soubor; $cil = SOUBORY."/".$konecnyNazevSouboru; $copy = move_uploaded_file($nazevSouboru, $cil) or die ("Přenesené soubory nelze zkopírovat"); $popis=$_POST[$popisekpole]; chmod ($cil, 0777); if($copy == true){ $NazevSouboru_db=$soubor; $datetime=time(); mysql_query("INSERT INTO soubory (nazev, popis, datetime) VALUES ('$NazevSouboru_db', '$popis', '$datetime')"); }else{ echo "Soubory nemohly být nahrány.\nPočet chyb: " . $_FILES[$textpole]['error']; } } if(isset($_POST["uloz"])){ if (!empty($_FILES['fupload']['name']) and $_FILES['fupload']!="none") { nahrajsoubor("fupload","popis"); if (!empty($_FILES['fupload2']['name']) and $_FILES['fupload2']!="none") { nahrajsoubor("fupload2","popis2"); if (!empty($_FILES['fupload3']['name']) and $_FILES['fupload2']!="none") { nahrajsoubor("fupload3","popis3"); } } } header("location: ".HTTP."/admin.php?akce=soubory"); } no a tohle: $filename = 'aa.bb.cc.dd.dat'; preg_match('~^(.*)(\.[a-z0-9]+)+?$~iu', $filename, $matches); var_dump($matches); $filename = str_replace('.', '', $matches[1]) . $matches[2]; var_dump($filename); echo $filename; mi zas vypíše array(3) { [0]=> string(15) "aa.bb.cc.dd.dat" [1]=> string(11) "aa.bb.cc.dd" [2]=> string(4) ".dat" } string(12) "aabbccdd.dat" aabbccdd.dat |
||
matlala Profil |
#14 · Zasláno: 26. 11. 2009, 21:50:11 · Upravil/a: matlala
jo ha var_dump vypíše co se provádí. Takže bez var_dump to vypíše pouze hodnotu.
Takže tak jo bez výpisu co se děje (var_dump)? mě to funguje a upraví to: $filename = 'aa.bb.cc.dd.dat'; preg_match('~^(.*)(\.[a-z0-9]+)+?$~iu', $filename, $matches); var_dump($matches); $filename = str_replace('.', '', $matches[1]) . $matches[2]; var_dump($filename); echo $filename; Mohl by mi ten regulár někdo pořádně vysvětlit, vůbec nevím co to má znamenat na konci ~iu? to vyhledá příponu? |
||
Majkl578 Profil |
#15 · Zasláno: 26. 11. 2009, 23:33:37 · Upravil/a: Majkl578
matlala:
To jsou modifikátory výrazu. i je case-insensitive a u je podpora unicode. |
||
Časová prodleva: 14 let
|
0