Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Usuwanie polskich znaków w nazwach plików uokiadiwabtcg orzez formularz
Forum PHP.pl > Forum > Przedszkole
marson
Witam

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 wink.gif

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.


  1. <head>
  2. <title>cc Simple Uploader</title>
  3. <script type="text/javascript" src="../../tiny_mce_popup.js" ></script>
  4. <script type="text/javascript" src="editor_plugin.js" ></script>
  5. <base target="_self" />
  6. </head>
  7. <body>
  8. <?php
  9. /*
  10. Name: uploader.php (for ccSimpleUploader tinyMCE plugin)
  11. Author: Timur Kovalev - www.creativecodedesign.com
  12. Distribution: Free for all to modify, distribute, and use, but I am not liable for any issues or problems.
  13. Note: THIS SCRIPT IS NOT SAFE FOR NON-AUTHENTICATED USE - There are no restrictions on types of files that can be uploaded!
  14. Someone could upload a malicious script that will destroy your files! User beware!
  15. */
  16.  
  17. $Action = isset($_GET["q"]) ? $_GET["q"] : "none"; // no action by default
  18. $upload_dir = isset($_GET["d"]) ? $_GET["d"] : "./"; // same directory by default
  19. $file_type = isset($_GET["type"]) ? $_GET["type"] : "unknown"; // when called from tinyMCE advimg/advlink this will be set and can be used for filtering..
  20. $substitute_dir = isset($_GET["subs"]) ? $_GET["subs"] : "./"; // same substitution directory by default
  21. $ResultTargetID = isset($_GET["id"]) ? $_GET["id"] : "src"; // (obsolete) - target ID now is provided by the tinyMCE framework
  22. $ResizeSizeX = isset($_GET["resize_x"]) ? $_GET["resize_x"] : 0; // don't resize the width by default
  23. $ResizeSizeY = isset($_GET["resize_y"]) ? $_GET["resize_y"] : 0; // don't resize the height by default
  24. $ReplaceFile = isset($_GET["replace_file"]) ? $_GET["replace_file"] : "yes"; // replace the file by default
  25.  
  26. if($Action=="none")
  27. display_upload_form();
  28. else if($Action=="upload")
  29. upload_content_file($upload_dir, $substitute_dir);
  30. ?>
  31. </body>
  32. </html>
  33.  
  34. <?php
  35.  
  36. // displays the upload form
  37. function display_upload_form()
  38. {
  39. ?>
  40. <form action="uploader.php?<?php echo $_SERVER["QUERY_STRING"]; ?>&q=upload" method="post" enctype="multipart/form-data" onsubmit="">
  41. Nazwa pliku: <br/>
  42. <input type="file" size="70" name="upload_file" ID="File1"/><br/>
  43. <input type="submit" name="Wgraj plik" value="Wgraj plik" style="width: 150px;" onclick="document.getElementById('progress_div').style.visibility='visible';"/>
  44. <div id="progress_div" style="visibility: hidden;"><img src="progress.gif" alt="wait..." style="padding-top: 5px;"></div>
  45. </form>
  46. <?php
  47. }
  48.  
  49.  
  50.  
  51. // uploads the file to the destination path, and returns a link with link path substituted for destination path
  52. function upload_content_file($DestPath, $DestLinkPath)
  53. {
  54. global $ResultTargetID,$ResizeSizeX,$ResizeSizeY,$ReplaceFile;
  55. $StatusMessage = "";
  56. $ActualFileName = "";
  57. $FileObject = $_FILES["upload_file"]; // find data on the file
  58. if(!isset($FileObject) || $FileObject["size"]<=0)
  59. {
  60. $StatusMessage = "Błąd! Nie wybrano pliku do wgrania";
  61. }
  62. else
  63. {
  64. $ActualFileName = $DestPath . "/" . $FileObject['name']; // formulate path to file
  65. if(file_exists($ActualFileName)) // check to see if the file already exists
  66. {
  67. if($ReplaceFile=="yes")
  68. $StatusMessage .= "Nadpisuję istniejący plik. "; // if so, we'll let the user know
  69. else
  70. $StatusMessage . "Błąd! plik o nazwie '$ActualFileName' już jest na serwerze!";
  71. }
  72. if($ReplaceFile=="yes")
  73. {
  74. if($ResizeSizeX!=0 || $ResizeSizeY!=0) // if we need to resize the file
  75. {
  76. $uploadedfile = $FileObject['tmp_name']; // get the handle to the file that was just uploaded
  77. if(ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName)!=TRUE) // just process without resizing
  78. {
  79. $StatusMessage .= "Unable to resize the file to specified dimensions. ";
  80. move_uploaded_file($FileObject['tmp_name'], $ActualFileName);
  81. }
  82. }
  83. else
  84. move_uploaded_file($FileObject['tmp_name'], $ActualFileName);
  85. $StatusMessage .= "Plik: " . $FileObject['name'] . " został wgrany na serwer!"; // to " . $ActualFileName . "!";
  86. $ActualFileName = $DestLinkPath . $FileObject['name']; // now create the link to the specified link path
  87. }
  88. }
  89. ShowPopUp($StatusMessage); // show the message to the user
  90. CloseWindow($ResultTargetID, $ActualFileName);
  91. }
  92.  
  93.  
  94.  
  95.  
  96. function ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName)
  97. {
  98. try
  99. {
  100. if(strpos($ActualFileName, ".jpg")==TRUE)
  101. $src = imagecreatefromjpeg($uploadedfile); // Create an image object
  102. else if(strpos($ActualFileName, ".gif")==TRUE)
  103. $src = imagecreatefromgif($uploadedfile);
  104. else if(strpos($ActualFileName, ".png")==TRUE)
  105. $src = imagecreatefrompng($uploadedfile);
  106. else
  107. return FALSE;
  108. list($Originalwidth, $Originalheight) = getimagesize($uploadedfile); // get current image size
  109. if($ResizeSizeY==0 && $ResizeSizeX!=0) // if only the width was specified
  110. $ResizeSizeY = ($Originalheight/$Originalwidth) * $ResizeSizeX;
  111. else if($ResizeSizeX==0 && $ResizeSizeY!=0) // if only the height was specified
  112. $ResizeSizeX = ($Originalwidth/$Originalheight) * $ResizeSizeY;
  113. $tmp = imagecreatetruecolor($ResizeSizeX, $ResizeSizeY); // create new image with calculated dimensions
  114. imagecopyresampled($tmp, $src, 0, 0, 0, 0, $ResizeSizeX, $ResizeSizeY, $Originalwidth, $Originalheight); // resize the image and copy it into $tmp image
  115. if(strpos($ActualFileName, ".jpg")==TRUE)
  116. imagejpeg($tmp, $ActualFileName, 100);
  117. else if(strpos($ActualFileName, ".gif")==TRUE)
  118. imagegif($tmp, $ActualFileName);
  119. else if(strpos($ActualFileName, ".png")==TRUE)
  120. imagepng($tmp, $ActualFileName, 100);
  121. imagedestroy($src);
  122. imagedestroy($tmp); // NOTE: PHP will clean up the temp file it created when the request has completed.
  123. }
  124. catch(Exception $e)
  125. {
  126. echo $e;
  127. return FALSE;
  128. }
  129. return TRUE;
  130. }
  131.  
  132.  
  133.  
  134. function ShowPopUp($PopupText)
  135. {
  136. echo "<script type=\"text/javascript\" language=\"javascript\">alert (\"$PopupText\");</script>";
  137. }
  138.  
  139. function CloseWindow($FocusItemID, $FocusItemValue)
  140. {
  141. ?>
  142. <script language="javascript" type="text/javascript">
  143. ClosePluginPopup('<?php echo $FocusItemValue; ?>');
  144. </script>
  145. <?php
  146. }
  147. ?>
  148.  


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.

  1. //Usówanie Polskich znaków oraz spacji z nazw plików
  2. function format_filename($ActualFileName) {
  3. $polskie = array(' ','ą','ć','ę','ł','ń','ó','ż','ź','Ą','Ć','Ę','Ł','Ń','Ó','Ż','Ź');
  4. $zwykle = array('-','a','c','e','l','n','o','z','z','A','C','E','L','N','O','Z','Z');
  5. $ActualFileName = str_replace($polskie,$zwykle,trim($ActualFileName));
  6. $allowed = "/[^a-z0-9\\.\\-\\_\\\\]/i";
  7. $ActualFileName = preg_replace($allowed,'',$ActualFileName);
  8. return $ActualFileName;
  9.  
  10. }
  11. // 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ą
  1. function upload_content_file($DestPath, $DestLinkPath)

Wtedy nie było żadnych efektów oraz po tej funkcji czyli przed linią:
  1. function ResizeImage($uploadedfile, $ResizeSizeX, $ResizeSizeY, $ActualFileName)


ale wtedy nawet nie pojawiał się formularz z opcją wstawienia plików
Helid
Po move_uploaded_file() użyj rename(). Ze zmiennej pobierz nazwę pliku i przepuść przez swoją funkcje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.