Diakritika v PHP File Uploaderu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Diakritika v PHP File Uploaderu – PHP – Fórum – Programujte.comDiakritika v PHP File Uploaderu – PHP – Fórum – Programujte.com

 

Bobo60
Newbie
5. 7. 2013   #1
-
0
-

Ahojda všichni.

Potřeboval bych trochu poradit s PHP File Uploaderem.

Tedy - kupodivu - funguje     . Ale zlobí při uploadu souboru s diakritikou (ěšč..). V defaultním nastavení vůbec nenahrazuje nejenom české znaky, ale i mezery a další znaky, které v názvech uploadovaných souborů nechci. Ty uploady budou dělat uživatelé a jak víme, některé názvy budou asi děs běs.

Zkrátka uploader soubor přenese tam kam má, ale nepřevede znaky ('č'->'c', '_'->'-', velké na malé, atd.).

Chci se zeptat jestli třeba neobsahuje uploader metodu, která se zavolá při jeho načtení a protáhne název souboru funkcí na nahrazení znaků..

Taky jsem zkoušel do include_phpuploader.php takovou upravenou fci vložit (http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=15459#9), ale nezadařilo se.

Budu vděčen za každou radu.

Nahlásit jako SPAM
IP: 78.80.97.–
Anonymní amatér
~ Anonymní uživatel
25 příspěvků
5. 7. 2013   #2
-
0
-

funkce z texthelperu Codeigniteru viz https://github.com/EllisLab/CodeIgniter

function convert_accented_characters($str)
{
$foreign_characters = array(
	'/ä|æ|ǽ/' => 'ae',
	'/ö|œ/' => 'oe',
	'/ü/' => 'ue',
	'/Ä/' => 'Ae',
	'/Ü/' => 'Ue',
	'/Ö/' => 'Oe',
	'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A',
	'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a',
	'/Б/' => 'B',
	'/б/' => 'b',
	'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
	'/ç|ć|ĉ|ċ|č/' => 'c',
	'/Д/' => 'D',
	'/д/' => 'd',
	'/Ð|Ď|Đ|Δ/' => 'Dj',
	'/ð|ď|đ|δ/' => 'dj',
	'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Ё|Э/' => 'E',
	'/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|ё|э/' => 'e',
	'/Ф/' => 'F',
	'/ф/' => 'f',
	'/Ĝ|Ğ|Ġ|Ģ|Γ|Г/' => 'G',
	'/ĝ|ğ|ġ|ģ|γ|г/' => 'g',
	'/Ĥ|Ħ/' => 'H',
	'/ĥ|ħ/' => 'h',
	'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Й/' => 'I',
	'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|й/' => 'i',
	'/Ĵ/' => 'J',
	'/ĵ/' => 'j',
	'/Ķ|Κ|К/' => 'K',
	'/ķ|κ|к/' => 'k',
	'/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L',
	'/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l',
	'/М/' => 'M',
	'/м/' => 'm',
	'/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N',
	'/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n',
	'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O',
	'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o',
	'/П/' => 'P',
	'/п/' => 'p',
	'/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R',
	'/ŕ|ŗ|ř|ρ|р/' => 'r',
	'/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S',
	'/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's',
	'/Ț|Ţ|Ť|Ŧ|τ|Т/' => 'T',
	'/ț|ţ|ť|ŧ|т/' => 't',
	'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U',
	'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u',
	'/Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ/' => 'Y',
	'/ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ/' => 'y',
	'/В/' => 'V',
	'/в/' => 'v',
	'/Ŵ/' => 'W',
	'/ŵ/' => 'w',
	'/Ź|Ż|Ž|Ζ|З/' => 'Z',
	'/ź|ż|ž|ζ|з/' => 'z',
	'/Æ|Ǽ/' => 'AE',
	'/ß/'=> 'ss',
	'/IJ/' => 'IJ',
	'/ij/' => 'ij',
	'/Œ/' => 'OE',
	'/ƒ/' => 'f',
	'/ξ/' => 'ks',
	'/π/' => 'p',
	'/β/' => 'v',
	'/μ/' => 'm',
	'/ψ/' => 'ps',
	'/Ж/'=>'Zh',
	'/ж/'=>'zh',
	'/Х/'=>'Kh',
	'/х/'=>'kh',
	'/Ц/'=>'Tc',
	'/ц/'=>'tc',
	'/Ч/'=>'Ch',
	'/ч/'=>'ch',
	'/Ш/'=>'Sh',
	'/ш/'=>'sh',
	'/Щ/'=>'Shch',
	'/щ/'=>'shch',
	'/Ю/'=>'Iu',
	'/ю/'=>'iu',
	'/Я/'=>'Ia',
	'/я/'=>'ia'
);
$array_from = array_keys($foreign_characters);
$array_to = array_values($foreign_characters);
return preg_replace($array_from, $array_to, $str);
}
Nahlásit jako SPAM
IP: 213.226.205.–
Anonymní amatér
~ Anonymní uživatel
25 příspěvků
5. 7. 2013   #3
-
0
-

Ještě bych upravil ten konec: 

...
$array_to = array_values($foreign_characters);
$not_asc = preg_replace($array_from, $array_to, $str);
return preg_replace('#[^a-z0-9-]#', '_', $not_asc);
}

S tím, že budeš kontrolovat pouze část před příponou a zvlášt samotnou příponu souboru, např jestli to co uživatel nahrál je obrázek a ne exe.

Nahlásit jako SPAM
IP: 213.226.205.–
Bobo60
Newbie
5. 7. 2013   #4
-
0
-

Díky, ale já mám spíš problém jak to do třídy namontovat.

Nahlásit jako SPAM
IP: 78.80.97.–
Anonymní amatér
~ Anonymní uživatel
25 příspěvků
5. 7. 2013   #5
-
0
-

No, tak z funkce uvnitř třídy se stane metoda a tu potom s zavoláš a její návratovou hodnotu použiješ při ukládání(při uploadu kopírování souboru).

Nahlásit jako SPAM
IP: 213.226.205.–
Bobo60
Newbie
6. 7. 2013   #6
-
0
-

Funkce to je opravdu obsáhlá, už jsem jí vyzkoušel jinde ale zakomponovat to nezvládnu.

Uploader se volá: 

$uploader=new PhpUploader();
$uploader->MultipleFilesUpload=true;
$uploader->InsertText="Vyberte soubor(y)";
$uploader->MaxSizeKB=1024000;
$uploader->AllowedFileExtensions=$conf["upload_mime_doc_konc"];
$uploader->SaveDirectory=$cesta;
$uploader->FlashUploadMode="Partial";
$uploader->Render();

K poli $_FILES tady nemám přístup a na vrtání ve vlastním uploaderu nemám.

Díky

Nahlásit jako SPAM
IP: 78.80.97.–
Anonymní amatér
~ Anonymní uživatel
25 příspěvků
6. 7. 2013   #7
-
0
-

Přístup k $_FILES mít musíš, pochybuju, že by to ten objekt řešil nějak jinak. Přenesení souboru z dočasnýho adresáře v php není žádná věda, zvládne to jediná funkce move_uploaded_file(). Jinak by nebylo na škodu si k tý knihovně přečíst dokumentaci, kde o uvedení názvu výsledného soboru není žádná zmínka. No na to, že za použití chtěj 99$ tak teda nic, moc...

Nahlásit jako SPAM
IP: 213.226.205.–
Bobo60
Newbie
7. 7. 2013   #8
-
0
-

No právě že nemám. Upload jsem dělal už víckrát. Je jednoduchej a problém s tím není. Tady ale není nic z klasiky, ani <input type="file">. Po zavolání třídy se načte objekt který se o vše postará.

Nezbyde než zkusit v třídě zkrátka najít správné místo a protáhnout název souboru fcí.

Souhlas, za sto doláčů by to mohlo takovejhle základ umět. Bohužel je to zatím první uploader, který jsem zvládl rozchodit.

Díkas

Nahlásit jako SPAM
IP: 78.80.97.–
Anonymní amatér
~ Anonymní uživatel
25 příspěvků
7. 7. 2013   #9
-
0
-

No, ale tak určitě při uploadu ta knihovna musí ten soubor načíst do dočasnýho adresáře, z toho bych vyšel a pak už to zpracoval tou php funkcí viz výše. Jinak jak jsem psal tu knihovnu neznám, ale snad když nezadáš cestu ani do konkrétního adresáře, tak by to mělo zůstat v tom dočasným ne? Stále nechápu, proč bys neměl mít přístup k $_FILES. Pokud to ta knihovna, dělá tak, že ti tuhle  proměnou vymaže/vyprázdní, no tak bych se tím vůbec nezabejval a napsal si něco vlastního.

Případně je možnost ten soubor nahrát tou knihovnou a poté ho přejmenovat...

Nahlásit jako SPAM
IP: 213.226.205.–
Bobo60
Newbie
7. 7. 2013   #10
-
0
-

Asi jsem našel místo kam to strčit. V třídě je metoda na nahrazení zdvojených zpětných lomítek v názvu souboru tak tam přidám volání fce a bude. Dám vědět

Nahlásit jako SPAM
IP: 78.80.97.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

PHP isset $FILE — založil Šugr

PHP: file permissions — založil Anonymní uživatel

PHP file upload... — založil smycma

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý