Arkiv for august 2009

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 :)