Avatar billede superbent Nybegynder
03. december 2004 - 03:16 Der er 7 kommentarer og
2 løsninger

Jeg har noget billede upload men vil gerne fjerne flere punktumer

Hej

Jeg har et billede upload, her er et udpluk:

while (list($name, $value) = each($_FILES['billede']['name'])) {
  if ($value) {
    $dist = $root_sti;
    $dist2 = $root_sti. "stor_";
    $files = $value;
... osv.

Jeg har oplevet fejl i mit script når man uploader med billeder som eks. har tegn som:
ö og é, men den mest almindelige fejl er at der er punktummer.

Såsom: hej.med.dig.jpg

Da jeg har et stort script, ønsker jeg ikke et nyt script, men vil gerne lige inden at filnavnet kører videre fjerne eventuelle punktummer som skulle være der.

I bund og grund vil jeg have variabelen ændret således:

$var = "hej.med.dig.jpg";
echo nogetkode($var); // udskriv hejmeddig.jpg

(hvis det hjælper, bruges dette kun til JPG billeder, hvis det gør det nemmere).

På forhånd mange mange tak.
Avatar billede olebole Juniormester
03. december 2004 - 03:20 #1
<ole>

Check på klienten og bed brugeren om at rename billedet

/mvh
</bole>
Avatar billede superbent Nybegynder
03. december 2004 - 03:27 #2
Det vil være endnu bedre, men jeg har det i et array.

<input type="file" name="billede[]">
<input type="file" name="billede[]">
<input type="file" name="billede[]">
osv.

Jeg har 10 af dem.

Er det muligt at lave en, som går igennem og tjekker og fortæller at man skal rename filen?
Det vil nemlig være endnu bedre, end at brugeren går igang med at upload og finder så ud af at han/hun har lavet noget forkert.

Men jeg har ikke helt forstand på sådan noget javascript, er det noget du kan være behjælpelig med olebole?
Avatar billede baitianlong Nybegynder
03. december 2004 - 04:38 #3
<?php
$fil = "hej.med.dig.jpg";
$fil2 = explode(".", $fil);
for($i = 0; $i < sizeof($fil2); $i++) {
  if($i == sizeof($fil2) - 1) print ".".$fil2[$i];
  else print $fil2[$i];
}
?>

Den udskriver hejmeddig.jpg :)
Avatar billede baitianlong Nybegynder
03. december 2004 - 04:43 #4
Eller som du vil have det i en funktion:

<?php

function fjernPunktummerUndtagenSidste($fil) {
    $fil2 = explode(".", $fil);
    for($i = 0; $i < sizeof($fil2); $i++) {
      if($i == sizeof($fil2) - 1) $return .= ".".$fil2[$i];
      else $return .= $fil2[$i];
    }
      return $return;
}

print fjernPunktummerUndtagenSidste("hej.med.dig.jpg");
?>

:)
Avatar billede schaefner Juniormester
03. december 2004 - 08:49 #5
<?php
function replaceDots($s, $replace="") {
    $pos = strrpos($s, ".");
    return str_replace(".", $replace, substr($s, 0, $pos)).substr($s, $pos);
}

print replaceDots("hej.med.dig.jpg")."<br />";
print replaceDots("hej.med.dig.jpg", "_");
?>
Avatar billede superbent Nybegynder
03. december 2004 - 13:01 #6
legende.dk og scaefner, kommer i begge med et svar? det virker fortræffeligt.

Nu jeg har jer, kan specieltegn i filnavne i upload af billeder gøre at man ikke kan uploade osv.?
Er det muligt i lige kan smide en kode for at fjerne tegn som:
æøåöéä m.v.?

Ellers skal i have en mange tak og jeg sætter points op, så i kan få 100 hver
Avatar billede schaefner Juniormester
03. december 2004 - 17:42 #7
<?php
function replaceChars($s, $replace="") {
  $search = array(".", "æ", "ø", "å", "ö", "é", "ä");

  $s = strtolower($s);
  $pos = strrpos($s, ".");
  return str_replace($search, $replace, substr($s, 0, $pos)).substr($s, $pos);
}

print replaceChars("børge.åd.en.gås.jpg","_");
?>

Skulle gerne udskrive: b_rge__d_en_g_s.jpg

Du kan også bestemme for hver karakter hvad den skal erstattes med:

<?php
function replaceChars($s) {
  $search  = array(".", "æ", "ø", "å", "ö", "é", "ä");
  $replace = array("_", "ae", "oe", "aa", "o", "e", "a");

  $s = strtolower($s);
  $pos = strrpos($s, ".");
  return str_replace($search, $replace, substr($s, 0, $pos)).substr($s, $pos);
}

print replaceChars("børge.åd.en.gås.jpg");
?>

Skulle gerne udskrive: boerge_aad_en_gaas.jpg

Og et svar hvis du kunen bruge noget af det.
Avatar billede olebole Juniormester
03. december 2004 - 17:50 #8
Problemet er, at der er rimeligt stramme regler for, hvordan filer til brug under HTTP-protokollen kan navngives. Derfor kan man aldrig være sikker på, hvordan filer med specialtegn i navnet behandles. I nogle tilfælde vil ens krumspring og hacks fungere - i andre vil de ikke.

Den eneste ordentlige løsning er derfor stadig at validere navnet på klienten og evt. bede brugeren om at omdøbe filen. Hvis ikke det er væsentligt, om upload altid lykkes, kan man selvfølgelig godt blæse på reglerne for navngivning - men ellers er det ikke at anbefale  ;o)
Avatar billede superbent Nybegynder
03. december 2004 - 18:01 #9
Mange tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester