h1

PHP rawurlencode() og problemer med enkelte tegn

august 24, 2009

Har laget meg et enkelt opplastingsskript for filer og kom da over et problem med rawurlencode().

Slet med å få rawurlencode() til å håndtere tegn som ( ) { } [ ] og whitespace riktig i filnavn. Skrev derfor følgende enkle funksjon for å strippe alle uønskede tegn fra filnavnet.

// A list of unwanted characters in filenames
$removeChars = ” (){}[]“; // All unwanted characters
$file_name = stripTheFollowingFromString($file_name, $removeChars); // Remove them
// URL encode the string
$file_name = rawurlencode($file_name);

$removeChars = ‘ (){}[]~?/\\\’”=+<>:;,*%|’; // All unwanted characters
$file_name = stripTheFollowingFromString($file_name, $removeChars); // Remove them
$file_name = strtolower($file_name); // Lowercase everything
$file_name = rawurlencode($file_name);

/**
*  Loops through all unwanted chars in string and removes them
*
*  @param String $string The string.
*  @param String $chars The unwanted characters.
*
*  @return String The new string without the unwanted chars.
*/

function stripTheFollowingFromString($string, $chars){
// Split unwanted chars to array
$charArr = str_split($chars);
// Loop through each char in charArr and remove them from string
$newString = $string;
for($i = 0; $i < count($charArr); $i++) {
$removeThis = $charArr[$i];
$newString = str_replace($removeThis, “”, $newString);
}

return $newString;
}

Så hvis noen andre har samme problem, værsågod, en veldig simpel funksjon for å unngå det problemet!

Har også prøvd å utf8_encode() først, til ingen nytte. Synes forresten det er veldig rart at rawurlencode() ikke takler filnavn som feks “Mitt Bilde (1).jpg”, det blir fullstendig kluss med kombinasjonen whitespace + (. Kan være jeg som overser noe helt banalt, men denne lille fiksen løste problemet for meg hvertfall :)

5 kommentarer

  1. Hurra! You solved it!


  2. nerd:P


  3. Hvis en som ikke kjenner deg går inn på bloggen din og ser dette innlegget øverst – ja, da kan jeg love deg at vedkommende forsvinner ganske fort igjen :P


  4. Ja, det kommer noen sånne innlegg innimellom. Og de er kanskje ikke myntet på hvermansen nei :P


  5. (det var også et hint om at du må skrive noe nytt snart!) ;)



Skriv en kommentar