Na wstępie ponieważ to mój pierwszy post tutaj to witam wszystkich i proszę o wyrozumiałość bo z PHP jestem zielony jak szczypiorek na wiosnę więc prosiłbym o podpowiedzi jak dla przedszkolaka

Otóż posiadam pewnego CMSa z edytorem TinyMCE na pokładzie, do tego TinyMCE doinstalowałem plugin ccSimpleUploader. umożliwiający upload plików z HDD na serwer i wstawiający link do nich i jak na moje umiejętności samo to jest sukcesem. Niestety plugin teb jest mocno uproszczony i nie posiada żadnych procedur umożliwiających zamianę Polskich znaków na "bezogonkowe odpowiedniki" czy spacji na podkreślenia np. mając plik kiciuś gżegżółka.doc chciałbym by był on przesyłany na serwer jako kicius_gzegzolka.doc Podjąłem pewne próby rozwiązania tego problemu ale jak na razie one nie przyniosły spodziewanego rezultatu, o tym za chwilkę. Najpierw pokażę oryginalny ( no nie do końca bo spolszczony przeze mnie) kod pluginu, który działa poprawnie z pominięciem rzecz jasna zmiany nazw plików, o których pisałem na początku.
<head> <title>cc Simple Uploader</title> <script type="text/javascript" src="../../tiny_mce_popup.js" ></script> <script type="text/javascript" src="editor_plugin.js" ></script> <base target="_self" /> </head> <body> <?php /* Name: uploader.php (for ccSimpleUploader tinyMCE plugin) Author: Timur Kovalev - www.creativecodedesign.com Distribution: Free for all to modify, distribute, and use, but I am not liable for any issues or problems. Note: THIS SCRIPT IS NOT SAFE FOR NON-AUTHENTICATED USE - There are no restrictions on types of files that can be uploaded! Someone could upload a malicious script that will destroy your files! User beware! */ $file_type = isset($_GET["type"]) ? $_GET["type"] : "unknown"; // when called from tinyMCE advimg/advlink this will be set and can be used for filtering.. $substitute_dir = isset($_GET["subs"]) ? $_GET["subs"] : "./"; // same substitution directory by default $ResultTargetID = isset($_GET["id"]) ? $_GET["id"] : "src"; // (obsolete) - target ID now is provided by the tinyMCE framework $ResizeSizeX = isset($_GET["resize_x"]) ? $_GET["resize_x"] : 0; // don't resize the width by default $ResizeSizeY = isset($_GET["resize_y"]) ? $_GET["resize_y"] : 0; // don't resize the height by default $ReplaceFile = isset($_GET["replace_file"]) ? $_GET["replace_file"] : "yes"; // replace the file by default if($Action=="none") display_upload_form(); else if($Action=="upload") upload_content_file($upload_dir, $substitute_dir); ?> </body> </html> <?php // displays the upload form function display_upload_form() { ?> <form action="uploader.php?<?php echo $_SERVER["QUERY_STRING"]; ?>&q=upload" method="post" enctype="multipart/form-data" onsubmit=""> Nazwa pliku: <br/> <input type="file" size="70" name="upload_file" ID="File1"/><br/> <input type="submit" name="Wgraj plik" value="Wgraj plik" style="width: 150px;" onclick="document.getElementById('progress_div').style.visibility='visible';"/> <div id="progress_div" style="visibility: hidden;"><img src="progress.gif" alt="wait..." style="padding-top: 5px;"></div> </form> <?php } // uploads the file to the destination path, and returns a link with link path substituted for destination path function upload_content_file($DestPath, $DestLinkPath) { $StatusMessage = ""; $ActualFileName = ""; $FileObject = $_FILES["upload_file"]; // find data on the file { $StatusMessage = "Błąd! Nie wybrano pliku do wgrania"; } else { $ActualFileName = $DestPath . "/" . $FileObject['name']; // formulate path to file { if($ReplaceFile=="yes") $StatusMessage .= "Nadpisuję istniejący plik. "; // if so, we'll let the user know else $StatusMessage . "Błąd! plik o nazwie '$ActualFileName' już jest na serwerze!"; } if($ReplaceFile=="yes") { if($ResizeSizeX!=0 || $ResizeSizeY!=0) // if we need to resize the file { $uploadedfile = $FileObject['tmp_name']; // get the handle to the file that was just uploaded if(ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName)!=TRUE) // just process without resizing { $StatusMessage .= "Unable to resize the file to specified dimensions. "; } } else $StatusMessage .= "Plik: " . $FileObject['name'] . " zostaĹ‚ wgrany na serwer!"; // to " . $ActualFileName . "!"; $ActualFileName = $DestLinkPath . $FileObject['name']; // now create the link to the specified link path } } ShowPopUp($StatusMessage); // show the message to the user CloseWindow($ResultTargetID, $ActualFileName); } function ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName) { try { $src = imagecreatefromjpeg($uploadedfile); // Create an image object $src = imagecreatefromgif($uploadedfile); $src = imagecreatefrompng($uploadedfile); else return FALSE; if($ResizeSizeY==0 && $ResizeSizeX!=0) // if only the width was specified $ResizeSizeY = ($Originalheight/$Originalwidth) * $ResizeSizeX; else if($ResizeSizeX==0 && $ResizeSizeY!=0) // if only the height was specified $ResizeSizeX = ($Originalwidth/$Originalheight) * $ResizeSizeY; $tmp = imagecreatetruecolor($ResizeSizeX, $ResizeSizeY); // create new image with calculated dimensions imagecopyresampled($tmp, $src, 0, 0, 0, 0, $ResizeSizeX, $ResizeSizeY, $Originalwidth, $Originalheight); // resize the image and copy it into $tmp image imagejpeg($tmp, $ActualFileName, 100); imagegif($tmp, $ActualFileName); imagepng($tmp, $ActualFileName, 100); imagedestroy($src); imagedestroy($tmp); // NOTE: PHP will clean up the temp file it created when the request has completed. } catch(Exception $e) { return FALSE; } return TRUE; } function ShowPopUp($PopupText) { } function CloseWindow($FocusItemID, $FocusItemValue) { ?> <script language="javascript" type="text/javascript"> </script> <?php } ?>
Jak pisałem wyżej próbowałem sam rozwiązać problem zamiany polskich znaków i z pomocą przykładów znalezionych gdzieś tam w innych skryptach i na internecie wypociłem poniższy kawałek kodu.
//Usówanie Polskich znaków oraz spacji z nazw plików function format_filename($ActualFileName) { $allowed = "/[^a-z0-9\\.\\-\\_\\\\]/i"; return $ActualFileName; } // koniec funkcji usówania polskich znaków i spacji z nazw plików
Jednak ani nie wiem czy to dobry kod ani co gorsza nie wiem gdzie go umieścić w powyższym pliku. Próbowałem na początku przed linią
function upload_content_file($DestPath, $DestLinkPath)
Wtedy nie było żadnych efektów oraz po tej funkcji czyli przed linią:
function ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName)
ale wtedy nawet nie pojawiał się formularz z opcją wstawienia plików